Android-更改复选框上的相关ListView行

Android-更改复选框上的相关ListView行,android,listview,checkbox,Android,Listview,Checkbox,我目前在Android应用程序中有一个列表视图,旁边有一个复选框 当复选框被更改时,我想从按钮所在的listview行中获取一些信息,然后将其持久化,但是,我无法确定如何从onClickChanged侦听器中获取行数据 我的listview是使用自定义JSONObject listadapter填充的,我希望这类似于在检测onLongTouch时确定选择了哪一行-例如,下面是我用于获取longTouch上所选行的相关JSON对象的代码: public boolean onContextItemS

我目前在Android应用程序中有一个列表视图,旁边有一个复选框

当复选框被更改时,我想从按钮所在的listview行中获取一些信息,然后将其持久化,但是,我无法确定如何从onClickChanged侦听器中获取行数据

我的listview是使用自定义JSONObject listadapter填充的,我希望这类似于在检测onLongTouch时确定选择了哪一行-例如,下面是我用于获取longTouch上所选行的相关JSON对象的代码:

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);

}

谢谢昨晚,我在复选框上使用了一个标签,实际上我刚刚想出了完全相同的方法!(我已经讨论了问题和解决方案,这里有我的实际代码)谢谢!昨晚,我在复选框上使用了一个标签,实际上我刚刚想出了完全相同的方法!(我已经讨论了问题和解决方案,这里是我的实际代码)