您的位置:首页 > 移动开发 > Android开发

Android ListView条目全选功能,不用checkbox实现!

2015-01-16 11:56 776 查看
其实也很简单的,就是在适配器里面建一个集合,主要盛装选中的条目,在写一些添加,清除的方法。在list_item里面放一张对号图片,第一次点击的时候显示,再点击在隐藏.....循环起来,先让看看效果图:如下图所示:



首先让我看看主Activity里面的代码,如下所示:

[java] view
plaincopy





package com.zqy.listviewdelete;



import java.util.ArrayList;

import java.util.List;





import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;



public class MainActivity extends Activity implements OnClickListener{

private List<String> strings = new ArrayList<String>();

private ListView mListView;

private ListAdapter adapter;

private Button btnCheckall, btnCancel;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.listView1);

adapter = new ListAdapter(this);

initVar();

initView();

adapter.setdata(strings);

mListView.setAdapter(adapter);

mListView.setOnItemClickListener(new OnItemClickListener() {



@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

/**

* 加入点击后选中的集合里面有就移除它,没有就添加进去

*/

if (adapter.isItemSelected(position)) {

adapter.removeSelected(position);

} else {

adapter.addSelected(position);

}

adapter.notifyDataSetChanged();

}

});

}

/**

* 初始化控件

*/

private void initView() {

btnCheckall=(Button) findViewById(R.id.btn_checkall);

btnCancel=(Button) findViewById(R.id.btn_cancel);

btnCheckall.setOnClickListener(this);

btnCancel.setOnClickListener(this);

}

/**

* 添加模拟数据

*/

private void initVar() {

for (int i = 0; i < 20; i++) {

strings.add(i + "");

}

}



@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_checkall:

/**

* 首先先移除在全选之前选中的条目

*/

adapter.removeselected();

/*

* 遍历集合 ,添加到选中集合进去

*/

for (int i = 0; i < strings.size(); i++) {

adapter.addSelected(i);

adapter.notifyDataSetChanged();

}

break;

case R.id.btn_cancel:

/**

* 清空选中集合

*/

adapter.removeselected();

adapter.notifyDataSetChanged();

break;

default:

break;

}



}



}

非常简单,初始化控件,添加虚拟数据,加入选中集合,全选遍历,删除清空集合

在让我们看看适配器里面的代码:如下所示:

[java] view
plaincopy





package com.zqy.listviewdelete;



import java.util.ArrayList;

import java.util.List;





import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;



public class ListAdapter extends BaseAdapter {

private Context mContext;

private List<String> list;

/**

* 定义一个选中的集合

*/

private List<Integer> seleteds;



public ListAdapter(Context context) {

super();

this.mContext = context;

list = new ArrayList<String>();

seleteds = new ArrayList<Integer>();

}

public void setdata(List<String> strings ){

list.addAll(strings);

}

@Override

public int getCount() {

return list.size();

}



@Override

public Object getItem(int position) {

return list.get(position);

}



@Override

public long getItemId(int position) {

return position;

}

/**

* 添加到选中集合

* @param position

*/

public void addSelected(int position) {

seleteds.add(position);

}

public void removeSelected(Integer position) {

if (seleteds.contains(position)) {

seleteds.remove(position);

}

}

/**

* 清空选中集合

*/

public void removeselected(){

seleteds.clear();

}

/*

* 判读是否饱含当前的条目

*/

public boolean isItemSelected(int position) {

return seleteds.contains(position) ? true : false;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder=null;

if(convertView==null){

convertView=LayoutInflater.from(mContext).inflate(R.layout.list_item, null);

holder=new ViewHolder();

holder.textView=(TextView) convertView.findViewById(R.id.textView1);

holder.imageView=(ImageView) convertView.findViewById(R.id.imageView1);

convertView.setTag(holder);

}else {

holder=(ViewHolder) convertView.getTag();

}

/**

* 由于convertView重用,所以在这需要把选中的图片在初始化一样。避免错乱

*/

holder.imageView.setVisibility(View.INVISIBLE);

/*

* 判读选中集合饱含条目就把选中的图片显示出来

*/

if (seleteds.contains(position)) {

holder.imageView.setVisibility(View.VISIBLE);

}

holder.textView.setText(list.get(position));

return convertView;

}





private static class ViewHolder {

TextView textView;

ImageView imageView;

}

}

就是几个方法,添加方法,清除方法等

好了,今天到此为止了,有什么问题留言,翻起了日记,才想写的这个,为了一些刚入门的新手,大神勿喷!



首先让我看看主Activity里面的代码,如下所示:

[java] view
plaincopy





package com.zqy.listviewdelete;



import java.util.ArrayList;

import java.util.List;





import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;



public class MainActivity extends Activity implements OnClickListener{

private List<String> strings = new ArrayList<String>();

private ListView mListView;

private ListAdapter adapter;

private Button btnCheckall, btnCancel;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.listView1);

adapter = new ListAdapter(this);

initVar();

initView();

adapter.setdata(strings);

mListView.setAdapter(adapter);

mListView.setOnItemClickListener(new OnItemClickListener() {



@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

/**

* 加入点击后选中的集合里面有就移除它,没有就添加进去

*/

if (adapter.isItemSelected(position)) {

adapter.removeSelected(position);

} else {

adapter.addSelected(position);

}

adapter.notifyDataSetChanged();

}

});

}

/**

* 初始化控件

*/

private void initView() {

btnCheckall=(Button) findViewById(R.id.btn_checkall);

btnCancel=(Button) findViewById(R.id.btn_cancel);

btnCheckall.setOnClickListener(this);

btnCancel.setOnClickListener(this);

}

/**

* 添加模拟数据

*/

private void initVar() {

for (int i = 0; i < 20; i++) {

strings.add(i + "");

}

}



@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_checkall:

/**

* 首先先移除在全选之前选中的条目

*/

adapter.removeselected();

/*

* 遍历集合 ,添加到选中集合进去

*/

for (int i = 0; i < strings.size(); i++) {

adapter.addSelected(i);

adapter.notifyDataSetChanged();

}

break;

case R.id.btn_cancel:

/**

* 清空选中集合

*/

adapter.removeselected();

adapter.notifyDataSetChanged();

break;

default:

break;

}



}



}

非常简单,初始化控件,添加虚拟数据,加入选中集合,全选遍历,删除清空集合

在让我们看看适配器里面的代码:如下所示:

[java] view
plaincopy





package com.zqy.listviewdelete;



import java.util.ArrayList;

import java.util.List;





import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;



public class ListAdapter extends BaseAdapter {

private Context mContext;

private List<String> list;

/**

* 定义一个选中的集合

*/

private List<Integer> seleteds;



public ListAdapter(Context context) {

super();

this.mContext = context;

list = new ArrayList<String>();

seleteds = new ArrayList<Integer>();

}

public void setdata(List<String> strings ){

list.addAll(strings);

}

@Override

public int getCount() {

return list.size();

}



@Override

public Object getItem(int position) {

return list.get(position);

}



@Override

public long getItemId(int position) {

return position;

}

/**

* 添加到选中集合

* @param position

*/

public void addSelected(int position) {

seleteds.add(position);

}

public void removeSelected(Integer position) {

if (seleteds.contains(position)) {

seleteds.remove(position);

}

}

/**

* 清空选中集合

*/

public void removeselected(){

seleteds.clear();

}

/*

* 判读是否饱含当前的条目

*/

public boolean isItemSelected(int position) {

return seleteds.contains(position) ? true : false;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder=null;

if(convertView==null){

convertView=LayoutInflater.from(mContext).inflate(R.layout.list_item, null);

holder=new ViewHolder();

holder.textView=(TextView) convertView.findViewById(R.id.textView1);

holder.imageView=(ImageView) convertView.findViewById(R.id.imageView1);

convertView.setTag(holder);

}else {

holder=(ViewHolder) convertView.getTag();

}

/**

* 由于convertView重用,所以在这需要把选中的图片在初始化一样。避免错乱

*/

holder.imageView.setVisibility(View.INVISIBLE);

/*

* 判读选中集合饱含条目就把选中的图片显示出来

*/

if (seleteds.contains(position)) {

holder.imageView.setVisibility(View.VISIBLE);

}

holder.textView.setText(list.get(position));

return convertView;

}





private static class ViewHolder {

TextView textView;

ImageView imageView;

}

}

就是几个方法,添加方法,清除方法等

好了,今天到此为止了,有什么问题留言,翻起了日记,才想写的这个,为了一些刚入门的新手,大神勿喷!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐