Android - 在CheckBox上获取相关的ListView行已更改

时间:2010-09-05 11:01:52

标签: android listview checkbox

我目前在Android应用中有一个ListView,旁边有一个CheckBox。

当复选框被更改时,我想从按钮所在的listview行获取一些信息然后保留它,但是,我无法弄清楚如何从onClickChanged监听器获取行数据。

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

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监听器不会在同一个活动中(因为它在行而不是列表中定义)

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

解决此问题的一种可能方法是在绑定发生时将一些信息附加到复选框。

在适配器中,添加(或修改)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);

}