安卓Android开发:listView+checkbox的简单实现

来源:互联网 发布:经纬之创网络 编辑:程序博客网 时间:2024/06/05 06:14
安卓Android开发:listView+checkbox的简单实现
项目要用到列表显示并实现每一个条目item的选择。参考网上的listView案例基本上都是在getview处用
holder 作tag来完成的。我用了一下但是在滚动过程中经常出现错乱。holder方案的思路就是只加载显
示部分的数据。这样做的优势是更高效,特别是item数据比较多的情况下。我这里用的方法是在调用数
据表格适配器Adapter时。直接加载全部item,这样listview如何滚动都不会错乱,更可靠。

在创建Adapter时循环调用makeItemView然后生成一个itemView[]数组。下面代码是我在网上找的,加工了一下。感谢原创者。


   private View makeItemView( String strTitle, String strText, String strCon, boolean 
isChecked, Bitmap bm) {
            LayoutInflater inflater = (LayoutInflater) select_report.this
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // 使用View的对象itemView与R.layout.item关联
            View itemView = inflater.inflate(R.layout.item, null);
            // 通过findViewById()方法实例R.layout.item内各组件
            TextView title = (TextView) itemView.findViewById(R.id.name);
            title.setText(strTitle);    //填入相应的值
            TextView text = (TextView) itemView.findViewById(R.id.time);
            text.setText(strText);
            TextView con = (TextView) itemView.findViewById(R.id.con);
            con.setText(strCon);
            ImageView image = (ImageView) itemView.findViewById(R.id.img);
            image.setImageBitmap(bm);
            CheckBox checkBox = (CheckBox) itemView.findViewById(R.id.checkBox);
            checkBox.setChecked(isChecked);
            return itemView;
        }


因为getView不做任何操作。如果你要遍历item。这个效率和holder方法是一样的。


  public View getView(int position, View convertView, ViewGroup parent) {
            return itemViews[position];//itemViews[position]下面要用到。
        }


第2个问题来了。如何知道哪些checkbox被勾选了?网上的方法是建一个表和checkbox对应。点击了
checkbox的同时也在表里做记录。要知道哪些被勾选直接查表。这个方法的优点是简单。而我采用直接读
checkbox状态的方法。这种方法我在网络上还没看到,算是原创吧。我的方法的优点是可靠。
要在listview中读取checkbox就要把itemView[]一层一层的掰开找到checkbox。
itemView就是一个ViewGroup。它里面还有ViewGroup。
  public void getcb() {
            for (int i = 0; i < listView.getCount(); i++) {
                ViewGroup vg = (ViewGroup) itemViews[i];
                ViewGroup vg1 = (ViewGroup) vg.getChildAt(1);
                ViewGroup vg2 = (ViewGroup) vg1.getChildAt(0);
                CheckBox cb = (CheckBox) vg2.getChildAt(3);
                Log.i("rrrrrr-getcb", i+" "+cb.isChecked());
            }
感谢网络上热心共享的人们。人人为我,我为人人。














0 0
原创粉丝点击