`

【android】checkedTextView形成自定义ListView

阅读更多
网络上的那个东西似乎都不准,以下是我做的此方法为可行。
首先,main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>


然后list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/_id"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="TextView" />
    
    <CheckedTextView
    android:id="@+id/checkText"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:paddingLeft="6dip"
    android:paddingRight="6dip"
/>

</RelativeLayout>


以下是自定义组件。
public final class Compan {
	public TextView id;
	public CheckedTextView ctv;
}


自定义adapter方法
package com.duduli.li;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CheckedTextView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class MyAdapter extends SimpleCursorAdapter{
	 private List list = new ArrayList();
	 public String s[];
	 private List<Map<String, Object>> data;   
	 private LayoutInflater layoutInflater;   
	 private List<String> delNumber = new ArrayList<String>();
	 @SuppressWarnings("unused")
	 private Context context; 
	 public MyAdapter(Context context, int layout, Cursor c,
				String[] from, int[] to) {  
		 super(context, layout, c, from, to);
	        this.context = context;   
	        this.data = getData();   
	        this.layoutInflater = LayoutInflater.from(context);   
	    }  
	 
	 
	 @Override
		public int getCount() {
			// TODO Auto-generated method stub
			return super.getCount();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return super.getItem(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return super.getItemId(position);
		}

		
	@SuppressWarnings("unused")
	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		Compan cp = null;
		if(cp == null){
			cp = new Compan();
			convertView = layoutInflater.inflate(R.layout.list, null);
			cp.id = (TextView) convertView.findViewById(R.id._id);
			cp.ctv =  (CheckedTextView) convertView.findViewById(R.id.checkText);
			convertView.setTag(cp);
		}else{
			cp = (Compan) convertView.getTag();
		}
		cp.id.setText((CharSequence) data.get(position).get("_id"));
		cp.ctv.setText((CharSequence) data.get(position).get("Number"));
		
		
		
		return convertView;
	}
	



	public List<Map<String, Object>> getData() {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

		while (getCursor().moveToNext()) {
			Map<String, Object> map = new HashMap<String, Object>();
			// System.out.println("ID: "+getCursor().getString(0));
			map.put("_id", getCursor().getString(0));
			// System.out.println("NAME: "+getCursor().getString(1));
			map.put("Number", getCursor().getString(1));
			list.add(map);
		}

		return list;
	}

}


下面是Acitivity
	

package com.duduli.li;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckedTextView;
import android.widget.ListView;

import com.duduli.db.AllowCallDAO;

	/**
	 * This example shows how to use choice mode on a list. This list is 
	 * in CHOICE_MODE_MULTIPLE mode, which means the items behave like
	 * checkboxes.
	 */
	public class CallComingTest2Activity extends ListActivity {
		private CheckedTextView multiple;
	    @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        AllowCallDAO dao = new AllowCallDAO(this);
	        MyAdapter adapter = new MyAdapter(this, R.layout.list, dao.show()
	        		, new String[]{"_id","phonenr"}, new int[]{R.id._id,R.id.checkText});
	        
	        

	        
	        final ListView listView = getListView();
	        
	        listView.setItemsCanFocus(false);
	        setListAdapter(adapter);
	        
	       
	    }


		@Override
		protected void onListItemClick(ListView l, View v, int position, long id) {
			// TODO Auto-generated method stub
			System.out.println(position);

//			[b]下面的才是最重要的,网络上写的为:multiple = (CheckedTextView)l.getChildAt(position).findViewById(R.id.checkText);此方法很有问题,比如说listview进行翻页之后就会出问题。[/b]
			multiple = (CheckedTextView)v.findViewById(R.id.checkText);
			if(multiple != null){
				System.out.println("not null");
			}else{
				System.out.println("null");
			}
			
			if(multiple.isChecked()){
				multiple.setChecked(false);
			}else{
				multiple.setChecked(true);
			}
			super.onListItemClick(l, v, position, id);
		}


		


		
	}
分享到:
评论

相关推荐

    android 自定义ListView实现单选

    总结,自定义ListView实现单选是Android开发中常见的需求。通过创建自定义Adapter,处理点击事件,以及优化视图复用,我们可以轻松实现这一功能。同时,自定义ListView也能为开发者提供更大的灵活性,以满足各种复杂...

    自定义ListView

    自定义ListView是为了满足更复杂的需求,比如添加特定的视图元素、实现特殊的功能或者优化性能。在这个例子中,我们关注的是“自定义含多选框的ListView”。 自定义ListView主要涉及以下几个方面: 1. **适配器...

    android自定义可选择ListView

    为了实现选择功能,我们通常会用到CheckedTextView或者自定义的Checkable布局作为ListView的列表项。 1. **自定义Adapter**: 创建一个继承自BaseAdapter的自定义Adapter,重写其四个关键方法:`getCount()`、`...

    Android 类似于windows listview的控件

    `FullListView`可能是一个包含上述所有功能的自定义ListView实现,它不仅支持列宽的拖动调整,还能显示和停止运行的程序。这个示例可以帮助开发者更好地理解如何在实际项目中使用和扩展ListView。 总之,Android的...

    android ListView简单示例

    - 若需在ListView项中添加复选框,可以使用CheckedTextView或自定义布局。同时,设置`setChoiceMode()`启用选择模式,如单选(CHOICE_MODE_SINGLE)或多选(CHOICE_MODE_MULTIPLE)。 8. **下拉刷新和上拉加载更多...

    android多选ListView示例

    如果你的ListView项是自定义的View,你可以使用实现`Checkable`接口的子视图,如`CheckedTextView`,这样在选中时会自动处理背景颜色和复选标记。 综上所述,创建一个多选ListView涉及设置ChoiceMode、维护选中状态...

    Android ListView单选

    然后,在Activity中找到这个ListView并设置适配器,适配器通常是继承自BaseAdapter的自定义类,负责填充数据和渲染视图。例如: ```java ListView listView = findViewById(R.id.myListView); ArrayAdapter&lt;String&gt;...

    安卓listview相关相关-androidlistview长按子项动态添加自定义viewTestView.rar

    本示例"安卓listview相关相关-androidlistview长按子项动态添加自定义viewTestView.rar"聚焦于ListView的一项高级用法:长按子项时动态添加自定义View。这个功能可以提升用户体验,比如在邮件应用中,长按邮件可以弹...

    android中listview多选demo

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。在实际应用中,我们经常需要为ListView添加多选功能,以便用户可以选取多个条目进行操作,如删除、编辑等。"android中listview多选demo"就是一...

    android自定义多选对话框

    "android自定义多选对话框"是一个常见的需求,特别是在需要用户从多个选项中进行选择时。在这个主题中,我们将深入探讨如何创建这样一个自定义的多选对话框。 首先,Android的`AlertDialog`类是系统提供的标准...

    自定义多选listview

    本文将深入探讨如何在Android中实现一个自定义的多选ListView。 首先,我们需要了解ListView的基本结构。ListView由多个列表项(ListView Item)组成,每个列表项通常是一个View或一个自定义的ViewGroup。在多选...

    android listview+checkbox

    - 多选模式下,通常需要一个CheckedTextView或者自定义带有Checkbox的布局。可以通过设置OnCheckedChangeListener来处理多选逻辑。 5. **点击事件处理** - ListView默认会捕获点击事件,如果同时要处理Checkbox的...

    Android-一个简单灵活的CheckedTextView或CheckableTextView

    与CheckedTextView不同,CheckableTextView并不是Android SDK自带的控件,而是开发者自定义的一个类,它可以扩展任何TextView,并添加可选中功能。这样做的好处是灵活性更高,可以根据项目需求定制更多的行为和样式...

    android listview 例子

    在Android开发中,ListView是一种非常重要的视图组件,它允许我们展示大量的数据并进行滚动浏览。这个"android listview 例子"着重展示了ListView在实际应用中的复杂使用方式,特别是如何在一个ListView中包含各种...

    Android ListView item 选中高亮显示

    虽然题目是关于ListView的,但现代的Android开发中,通常推荐使用RecycleView代替ListView,因为它提供了更多的自定义选项和更好的性能。实现RecycleView的选中高亮效果与ListView类似,只是需要适配的是...

    ListView效果

    本篇文章将深入探讨如何在Android中自定义ListView的效果。 首先,我们从基础开始。ListView通过Adapter来绑定数据,Adapter是连接ListView和数据源的桥梁。常见的Adapter有ArrayAdapter、SimpleAdapter等,但为了...

    操作ListView控件源码

    如果需要在列表项中包含复选框,可以使用CheckedTextView或者自定义布局,并在Adapter中处理复选状态。同时,ListView还支持选择模式,如SINGLE_CHOICE, MULTIPLE_CHOICE等,可以通过`setChoiceMode()`设置。 **6. ...

    Android三级目录,ListView单选

    总之,实现Android三级目录和ListView单选及二级单选涉及到了数据结构、自定义Adapter、事件监听、布局设计等多个Android开发的关键技术。通过这些技术的组合,我们可以创建出一个功能完整且用户体验良好的目录选择...

    Android应用源码之34.ListView控件学习.zip

    在Android开发中,ListView是一个非常重要的控件,它允许开发者在一个垂直滚动的列表中展示大量数据。本资料包“34.ListView控件学习”显然旨在深入解析ListView的使用方法和技巧,通过源码分析帮助开发者更好地理解...

    listview单选

    实现ListView的单选,我们可以使用CheckedTextView或者自定义适配器来配合CheckedStateTracker类进行操作。下面我们将详细探讨如何实现这一功能。 首先,我们来看看CheckedTextView。CheckedTextView是TextView的...

Global site tag (gtag.js) - Google Analytics