码迷,mamicode.com
首页 > 其他好文 > 详细

不用ChoiceMode实现ListView的长按进入多选删除模式。

时间:2015-01-30 22:45:13      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:listview   长按删除   多选   checkbox   

今天在仿制一个应用的时候,发现我不会实现listView的长按进入多选这个功能,就找了一下资料。。发现找资料用去的时间还是蛮多的。。。天。理解完之后,自己写了一份代码。

       简单来说,就是实施对ListView中item的长按监控,对CheckBox的显示与隐藏进行操作而已。好像有一个ListView中有一个setChoseMode方法。。不太清楚怎么用的,等下我再看看研究研究,应该会更简便。本编例子只显示一个基本的想法,详细实现---略。欢迎交流。


simple_item_listview.xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/simple_item_tv"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
       />
    <CheckBox
        android:id="@+id/simple_item_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:visibility="gone"
         />

</LinearLayout>

activity的xml只有一个listView


主代码:

public class MainActivity extends ActionBarActivity implements OnItemLongClickListener,OnClickListener{
	
	private ListView mListView;
	private Button mDelBt;
	
	private BaseAdapter mBaseAdapter;
	
	private static final int CHOICE_MODE = 1;				//多选模式的标识	
	private static final int DELETE_BUTTON_ID = 1;			//删除button的id
	private int mode = 0;									//当前模式的标识
	
	final String[] data = new String[]{"i","like","android"};//本例只做简单示范,不对数据进行删除操作。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mListView = (ListView)findViewById(R.id.listview);
		mListView.setOnItemLongClickListener(this);
		
		initAdapter();													//初始化adapter
	
		mListView.setAdapter(mBaseAdapter);
	}
	
	/**
	 * 初始化adapter。为方便大家看,这里就不继承重写BaseAdapter类了。
	 */
	private void initAdapter() {
			mBaseAdapter = new BaseAdapter() {
			
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				if(convertView == null){
					
					convertView = getLayoutInflater().inflate(R.layout.simple_item_listview, null);
				}
				
				TextView tv = (TextView) convertView.findViewById(R.id.simple_item_tv);
				tv.setText(data[position]);
				
				CheckBox cb = (CheckBox) convertView.findViewById(R.id.simple_item_cb);
				
				if(mode==CHOICE_MODE){
					cb.setVisibility(View.VISIBLE);
				}else{
					cb.setVisibility(View.GONE);
				}
				return convertView;
			}
			
			@Override
			public long getItemId(int position) {
				return position;
			}
			
			@Override
			public Object getItem(int position) {
				return data[position];
			}
			
			@Override
			public int getCount() {
				return data.length;
			}
		};		
	}

	/* 
	 * 监控listview的长按事件,当长按时更改视图,显示checkbox,让用户对
	 * 其进行多选。
	 */
	@Override
	public boolean onItemLongClick(AdapterView<?> parent, View view,
			int position, long id) {
		mode = CHOICE_MODE;
		((CheckBox)view.findViewById(R.id.simple_item_cb)).setChecked(true);	//选中被长按的item
		mBaseAdapter.notifyDataSetChanged();
		showDeleteButton();
		return false;
	}
	
	/**
	 * 展示删除按钮
	 */
	private void showDeleteButton() {
		android.widget.AbsListView.LayoutParams params = new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		
		mDelBt = new Button(this);
		mDelBt.setId(DELETE_BUTTON_ID);
		mDelBt.setLayoutParams(params);
		mDelBt.setText("删除");
		mDelBt.setOnClickListener(this);
		mListView.addFooterView(mDelBt);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case DELETE_BUTTON_ID:
			
			//删除操作方法在这里,里面首先要获取哪些被选中,才能对其进行操作。
			delete();
			
			mListView.removeFooterView(mDelBt);		//隐藏删除button
			
			mode = 0;					//还原为非多选模式,隐藏checkbox
			
			mBaseAdapter.notifyDataSetChanged();	<span style="white-space:pre">	</span>//更新视图
			
			break;

		default:
			break;
		}
	}

	/**
	 * 删除item方法
	 */
	private void delete() {
		//可以是遍历哪个被check了,然后对其进行操作,数据方面需要有一个保存是否check的变量。本例为简便没有设置。
	}


不用ChoiceMode实现ListView的长按进入多选删除模式。

标签:listview   长按删除   多选   checkbox   

原文地址:http://blog.csdn.net/zuolovefu/article/details/43312549

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!