我有一个活动,其中包含一个列表片段,其中的每个行都有一个复选框。我为复选框设置了onclick
xml属性,并执行以下操作以进行测试
public void onBoxClick(View v){
checkedItems = listview.getCheckedItemPositions();
int checkedItemsCount = checkedItems.size();
}
checkedItemsCount
返回0
,我想知道您使用listview.getCheckedItemPositions()
检查了哪些项目,但事实并非如此,我怎么知道列表中检查了什么?< / p>
这是我的listfragment创建
@Override
public void onActivityCreated(Bundle state){
super.onActivityCreated(state);
listview = getListView();
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listview.setItemsCanFocus(false);
setEmptyText("No Bowlers");
registerForContextMenu(getListView());
populateList();
}
答案 0 :(得分:0)
这post可能有所帮助。它使用自定义ResourceCursorAdapter
提供解决方案,为每个CheckBox
行提供TextView
和ListView
。
要在ListView
中选择多个项目,请检查此page。请注意,该示例使用的是ListActivity
而不是ListFragment
,但您的代码最终会非常相似。只需确保正确实施Fragment
生命周期方法(即在ListFragment
的{{1}}等设置适配器。)。
答案 1 :(得分:0)
我通过自定义适配器的bindView
解决了这个问题,我创建了一个ArrayList<Integer>
变量
ArrayList<Integer> mCheckedItems = new ArrayList<Integer>();
并在bindView
我在复选框上设置checkedchangelistener
以查看是否已选中该复选框。如果已经检查过,我将光标所在的数据库中的id放入mCheckedItems Array
适配器:
public class CheckAdapter extends SimpleCursorAdapter{
Context context;
public CheckAdapter(Context context, int layout, Cursor c,String[] from, int[] to,int flag) {
super(context, layout, c, from, to);
this.context = context;
}
@Override
public void bindView(View view,Context context,Cursor cursor){
final String name = cursor.getString(cursor.getColumnIndex(BowlersDB.NAME));
final int id = cursor.getInt(cursor.getColumnIndex(BowlersDB.ID));
TextView tv = (TextView)view.findViewById(R.id.nameCheckTV);
tv.setText(name);
CheckBox cb = (CheckBox)view.findViewById(R.id.checkBox1);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(isChecked){
mCheckedItems.add(id);
}else if(!isChecked){
for(int i=0; i< mCheckedItems.size(); i++){
if(mCheckedItems.get(i) == id){
mCheckedItems.remove(i);
}
}
}
}
});
}
将id插入数组后,我使用数组列表来使用它们我需要的方式