Android-更改复选框上的相关ListView行
我目前在Android应用程序中有一个列表视图,旁边有一个复选框 当复选框被更改时,我想从按钮所在的listview行中获取一些信息,然后将其持久化,但是,我无法确定如何从onClickChanged侦听器中获取行数据 我的listview是使用自定义JSONObject listadapter填充的,我希望这类似于在检测onLongTouch时确定选择了哪一行-例如,下面是我用于获取longTouch上所选行的相关JSON对象的代码:Android-更改复选框上的相关ListView行,android,listview,checkbox,Android,Listview,Checkbox,我目前在Android应用程序中有一个列表视图,旁边有一个复选框 当复选框被更改时,我想从按钮所在的listview行中获取一些信息,然后将其持久化,但是,我无法确定如何从onClickChanged侦听器中获取行数据 我的listview是使用自定义JSONObject listadapter填充的,我希望这类似于在检测onLongTouch时确定选择了哪一行-例如,下面是我用于获取longTouch上所选行的相关JSON对象的代码: public boolean onContextItemS
public boolean onContextItemSelected(MenuItem item) {
//get row selected information
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
JSONObject selected = (JSONObject) getListAdapter().getItem(menuInfo.position);
上述内容显然在我的ListActivity中,而我的onCheckChanged侦听器将不在同一个活动中(因为它是在行而不是列表中定义的)
任何帮助都将不胜感激 解决此问题的一种可能方法是在绑定时将一些信息附加到复选框 在适配器中,像这样添加(或修改)bindView覆盖,以添加包含所需上下文信息的标记:
@Override
public void bindView( View view, Context context, Cursor cursor){
CheckBox checker = (CheckBox)view.findViewById(R.id.checkbox);
checker.setOnCheckedChangeListener(MyActivity.this);
checker.setTag(Long.valueOf(cursor.getLong(cursor.getColumnIndex(BaseColumns._ID))));
// call super class for default binding
super.bindView(view,context,cursor);
}
(或将任何其他值附加到复选框,以帮助您识别项目,例如属性名称或索引)
然后,在onCheckedChanged中,您可以参考此信息来标识已更改的项:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Long id = (Long) buttonView.getTag();
if ( id!=null)
Log.d(TAG, "onCheckedChanged id="+id);
}
解决此问题的一种可能方法是在绑定发生时向复选框附加一些信息 在适配器中,像这样添加(或修改)bindView覆盖,以添加包含所需上下文信息的标记:
@Override
public void bindView( View view, Context context, Cursor cursor){
CheckBox checker = (CheckBox)view.findViewById(R.id.checkbox);
checker.setOnCheckedChangeListener(MyActivity.this);
checker.setTag(Long.valueOf(cursor.getLong(cursor.getColumnIndex(BaseColumns._ID))));
// call super class for default binding
super.bindView(view,context,cursor);
}
(或将任何其他值附加到复选框,以帮助您识别项目,例如属性名称或索引)
然后,在onCheckedChanged中,您可以参考此信息来标识已更改的项:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Long id = (Long) buttonView.getTag();
if ( id!=null)
Log.d(TAG, "onCheckedChanged id="+id);
}
谢谢昨晚,我在复选框上使用了一个标签,实际上我刚刚想出了完全相同的方法!(我已经讨论了问题和解决方案,这里有我的实际代码)谢谢!昨晚,我在复选框上使用了一个标签,实际上我刚刚想出了完全相同的方法!(我已经讨论了问题和解决方案,这里是我的实际代码)