2013-01-06 102 views
0

我有一个自定义列表视图项目布局在左边有一个复选框和4个文本很像astrid任务管理器。 enter image description here更新复选框上的列表项内容点击

我打算做的是点击复选框后,textviews必须更新它们的值。起初,我的问题是检查位置1上的复选框会在滚动时检查最后或其他地方的复选框。在寻找解决方案的同时,我开始了解如何在listview中回收视图。我现在应用了诸如viewholder和right这样的概念,我能够保持复选框的状态。但是,点击复选框后,我会更改文字浏览并且更改不会持续,这意味着任何随机电视也会显示相同的更改。

我已经在我的适配器中应用了onclicklistener复选框。任何想法如何实现它?

回答

0

您需要在项目数据中保留项目的状态,而不是视图持有者。视图持有人只是一个方便的视图,在不同的时间将显示许多不同的项目,假设你回收视图。在数据绑定过程中,您需要绑定显示项目所需的所有状态,以避免随机数据出现在另一个列表项视图中。

public class MyListAdapter extends BaseAdapter { 

    // .... 

    @Override 
    View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      view = inflate(R.layout.my_list_item_layout, parent, false); 

      // View holder just prevents having to look up these values 
      // every time the view is reused. 
      MyViewHolder holder = new MyViewHolder(); 
      holder.checkbox = (CheckBox) view.findViewById(R.id.check_box); 
      holder.textview = (TextView) view.findViewById(R.id.text_view); 
      view.setTag(holder); 
     } 

     final MyViewHolder holder = (MyViewHolder) view.getTag(); 
     final MyData data = (MyData) getItem(position); 
     holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       data.savedCheckboxState = isChecked; 
       // now tell the view to rebind the data 
       notifyDataSetChanged(); 
      } 
     }); 

     holder.checkbox.setChecked(data.savedCheckboxState); 
     holder.textview.setText(String.valueOf(data.savedCheckboxState)); 
     return view; 
    } 

    private static class MyViewHolder { 
     CheckBox checkbox; 
     TextView textview; 
    } 
} 
0

你可以参考我在这里完整的代码,你可以做的是,在布尔数组保存复选框状态,那么你不会遇到这个问题.....

Android checkbox multiselected issue

相关问题