在 Listview 中检索选中 CheckBoxes 的项目
Posted
技术标签:
【中文标题】在 Listview 中检索选中 CheckBoxes 的项目【英文标题】:Retrieve checked CheckBoxes's items in Listview 【发布时间】:2011-01-16 14:49:58 【问题描述】:我有 ListActivity,我正在使用自定义 CursorAdapter。
在列表的每个项目中,我还有复选框...
现在我的列表屏幕中有一个烫发按钮,当你按下它时,
它应该找到所有被“选中”的复选框,并对它的复选框被“选中”的项目进行一些操作。
我怎样才能找回所有选中的?
我已经完成了focusable:false,所以我可以使用OnClickListener,但我不知道还有多远 这.. 谢谢,
一些代码: 这是在我的 ListActivity 类中:
final String columns[] = new String[] MyUsers.User._ID,
MyUsers.User.MSG, MyUsers.User.LOCATION ;
int[] to = new int[] R.id.toptext, R.id.bottomtext,R.id.ChkBox,
R.id.Location;
Uri myUri = Uri.parse("content://com.idan.datastorageprovider/users");
Cursor cursor = getContentResolver().query(myUri, columns, null, null, null);
startManagingCursor(cursor);
ListCursorAdapter myCursorAdapter=new ListCursorAdapter(this,R.layout.listitem, cursor, columns, to);
this.setListAdapter(myCursorAdapter);
这是我的自定义光标适配器类:
public class ListCursorAdapter extends SimpleCursorAdapter
private Context context;
private int layout;
public ListCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to)
super(context, layout, c, from, to);
this.context = context;
this.layout = layout;
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
return v;
@Override
public void bindView(View v, Context context, Cursor c)
TextView topText = (TextView) v.findViewById(R.id.toptext);
if (topText != null)
topText.setText("");
int nameCol = c.getColumnIndex(MyUsers.User.MSG);
String name = c.getString(nameCol);
TextView buttomTxt = (TextView) v.findViewById(R.id.bottomtext);
if (buttomTxt != null)
buttomTxt.setText("Message: "+name);
nameCol = c.getColumnIndex(MyUsers.User.LOCATION);
name = c.getString(nameCol);
TextView location = (TextView) v.findViewById(R.id.Location);
if (locationLinkTxt != null)
locationLinkTxt.setText(name);
【问题讨论】:
请发布您的代码... 我不知道我应该发布什么,因为它之间的必要代码丢失了,请告诉我你不明白什么?我所拥有的只是列表视图,在每个项目中我还有一个复选框,列表视图通过 CursorAdapter 绑定到数据库。我想按一下按钮,以检索三个复选框状态为 CHECKED 的所有项目。谢谢你,雷。 【参考方案1】: //Modify to meet your needs
String[] from = new String[] YourDbAdapter.KEY_WORDS_ROWID, YourDbAdapter.KEY_WORDS_ROWID;
int[] to = new int[] R.id.row_item_checkbox;
mAdapter = new SimpleCursorAdapter(this, R.layout.row_item_with_checkbox, yourDbCursor, from, to);
mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder()
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex)
if(view.getId() == R.id.myCheckbox )
CheckBox cb = (CheckBox) view;
cb.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
final long id = cursor.getLong(columnIndex); //Your row id
//You can do the necessary work here such as adding to an List or somehting
);
return true;
return false;
);
【讨论】:
如果你的意思是数据库索引,我不确定我应该放什么?我的复选框状态如何连接到我的数据库? 如果有人可以帮忙吗?我真的被困在这里..无法弄清楚我应该如何继续.. 你说你从数据库中获取结果。所以它可能类似于 dBConnectionHelper.INDEX_MYTABLE_COLUMN。如果您没有将复选框连接到任何数据库字段,则不必担心该部分,只需将其删除即可。设置光标适配器时,只需将数据库中的 _id 与布局中的复选框链接。这样您就可以使用 _id 稍后在您的数据库中执行 SQL 操作。 我更改了它以更好地适应您的情况 - 见上文 谢谢,但不确定我是否理解,或者我可能你没有......我将我的项目连接到数据库,而不是项目中的复选框部分。好的,我将编辑我的问题并提供我所拥有的代码示例以上是关于在 Listview 中检索选中 CheckBoxes 的项目的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我在选中 CheckBox 的情况下滚动 ListView 时,它会变为未选中状态?
Android中ListView包含CheckBox时滑动丢失选中状态的解决