ListView多条选中以及统计选中状态,避免复用错乱

来源:互联网 发布:属于网络调查的特点是 编辑:程序博客网 时间:2024/06/04 18:56

昨晚帮朋友解决了一个选中状态错乱的问题,自己也复习了一下,所以把这个代码记录一下


这里写图片描述

/** * 描述:ListView多条选中以及统计选中状态,避免复用错乱 * 开发者:开发者的乐趣JRT * 创建时间:2017-4-20 21:32 * CSDN地址:http://blog.csdn.net/Jiang_Rong_Tao/article * E-mail:jrtxb520@163.com **/public class ListViewActivity extends AppCompatActivity {    private static final String TAG = "ListViewActivity";    private ListView mListView;    private List<ListItem> mList;    private ListViewActivity mContext;    private MyAdapter adapter;    private TextView mTvCount;    int count=0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_list_view);        mContext =this;        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        initData();        initView();        initListen();    }    /**     * 做假数据     */    private void initData() {        mList=new ArrayList<>();        for (int i=0;i<30;i++){            ListItem listItem = new ListItem("李小龙" + i, false);            mList.add(listItem);        }    }    private void initView() {        mListView = (ListView) findViewById(R.id.list_view);        mTvCount = (TextView) findViewById(R.id.tv_count);        adapter = new MyAdapter();        mListView.setAdapter(adapter);    }    private class MyAdapter extends BaseAdapter{        @Override        public int getCount() {            return mList.size();        }        @Override        public Object getItem(int position) {            return mList.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            if (convertView==null){                convertView=View.inflate(mContext,R.layout.list_item,null);            }            MyHolder myholder=MyHolder.getViewHolder(convertView);            myholder.tv_title.setText(mList.get(position).title);            boolean isChoose = mList.get(position).isChoose;            Log.i(TAG, "position="+position+",isChoose: ="+isChoose);            myholder.iv_ischoose.setImageResource(isChoose?R.drawable.password_sel:R.drawable.password_nor);            return convertView;        }    }    private void initListen() {        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                ListItem itemAtPosition = (ListItem) parent.getItemAtPosition(position);                boolean isChoose = itemAtPosition.isChoose;                count=isChoose?--count:++count;//以前选中,再次点击表示没选中                mList.get(position).isChoose=!isChoose;//修改选中状态,并更新集合                Log.i(TAG, "count:= "+count);                mTvCount.setText("选中了"+count+"个");                adapter.notifyDataSetChanged();            }        });    }    static class MyHolder{        private TextView tv_title;        private ImageView iv_ischoose;        public MyHolder( View convertView) {            tv_title= (TextView) convertView.findViewById(R.id.tv_title);            iv_ischoose= (ImageView) convertView.findViewById(R.id.iv_ischoose);        }        public static MyHolder getViewHolder(View convertView) {            MyHolder  holder= (MyHolder) convertView.getTag();            if(holder==null){                holder = new MyHolder(convertView);                convertView.setTag(holder);            }            return holder;        }    }}

由于CheckBox有可能抢占光标,所以我就用ImageView切换图片实现,给javabean多加一个选中的字段。

public class ListItem {    public ListItem(String title, boolean isChoose) {        this.title = title;        this.isChoose = isChoose;    }    public String title;    public boolean isChoose;}

只是做个笔记而已

0 0
原创粉丝点击