2012-04-24 156 views
0

此Android视图回收事情是相当疯狂的,我花了整整一天试图得到一个解决方法。安卓列表复选框

这是我的代码和没有工作

public class CustomCursorAdapter extends SimpleCursorAdapter { 

    private Context currentContext; 
    private Cursor mCursor; 
    private boolean[] rows; 

    public CustomCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     // TODO Auto-generated constructor stub 
     currentContext = context; 
     mCursor = c; 
     populateRows(); 
    } 

    private void populateRows() { 
     rows = new boolean[mCursor.getCount()]; 
     int i = 0; 
     while (mCursor.moveToNext()) { 
      rows[i] = false; 
      i++;    
     } 

    } 

    @Override 
    public View getView(int position, View v, ViewGroup parent) { 
     // convertView.setBackgroundColor(R.drawable.darkred); 
     if (v != null) { 
      //getting checkbox 
      CheckBox cb = (CheckBox) v.findViewById(R.id.name); 

      if(rows[position]){ 
       rows[position] = false; 
      }else{ 
       rows[position] = true; 
      } 
      cb.setChecked(rows[position]); 

     } 

     return super.getView(position, v, parent); 
    } 

} 

任何帮助表示赞赏。

+0

你能更具体,以创建新实例,例如。你想做什么?什么不起作用?它怎么不工作?您提供的信息越多,您获得的帮助就越多。 – Gophermofur 2012-04-24 15:38:52

+0

即时通讯从数据库返回光标和复选框的此选中状态不与任何数据库列相关,它仅用于显示给用户哪些行被选中。后来我将选定的值添加到数据库中的另一个表,该部分工作,我只是不能使这个选择框复选框正常工作 – 2012-04-24 17:07:24

回答

0

很多事情错在这里:

  • 在getView不改变状态。我指的是翻转行[position]。可能会多次调用getView来绘制相同的列表行。作为一个附注,你可以通过使用a =!a;
  • 将选中的状态设置为if on v!= null。如果你回收一个视图,你仍然需要初始化它的UI,因为它可能被设置为不同数据行的状态。
  • 如果视图不为空,而你重用,返回它
  • 如果视图为空,则需要通过虚报布局
+0

好的,谢谢我明白你的观点。那么我应该在onListItemClick方法的列表活动中更改状态?这不会工作 – 2012-04-24 16:51:14

+0

非常感谢我解决了它,但堆栈溢出不会让我发布我的答案,所以... – 2012-04-24 20:02:13