4

我有一个 ListView,我在其中动态添加行项。每行有一个孩子。现在我在这些孩子上设置点击监听器,在它们中它要求我将这些子项目保持为最终状态,它可以很好地与它们一起工作,并且可以这样做,因为我在每个点击监听器中创建一个类。

这里 isFree 是最后一个复选框。

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        // TODO Auto-generated method stub
        if (isFree.isChecked()){...}
    }
});

但我不觉得这是一个好的编程习惯,我想使用一些函数来检测哪个孩子被点击,然后我应该能够使用 getParent 访问它的行,然后使用 getChildAt(index) 访问它的兄弟项目所以,我用这个:

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        // TODO Auto-generated method stub
        CheckBox tv=(CheckBox) getCurrentFocus();
        TableRow row = (TableRow)tv.getParent();
        TextView tv1=(TextView) row.getChildAt(5);
        if (tv.isChecked()){...}
    }
});

但是当我使用它时,焦点项目实际上返回列表视图,但我希望行中的焦点项目。

4

2 回答 2

0

setOnCheckedChangeListener方法上,第一个参数是 a CompoundButton,它是 的超类CheckBox。所以,实际上, arg0 是你的复选框。使用它来检索父列表项并制作您的东西。

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        // TODO Auto-generated method stub
        TableRow row = (TableRow)arg0.getParent();
        TextView tv1=(TextView) row.getChildAt(5);
        if (arg0.isChecked()){...}
    }
});
于 2013-10-18T08:41:07.460 回答
0

您可以使用 onItemClickListener 获取 listview 的哪个子项,但是如果您想对具有某些复选框或其他可点击视图的行执行某些操作,并且您想对这些单击执行某些操作,那么我认为您必须使用 click这些观点本身的听众。

但是,如果您想在单击这些单个视图时获取 listitem 行,则可以使用视图类的 setTag 方法来存储索引,然后从单击侦听器上的该索引中获取行项目。

public view getView(int position, View convertView, ..) {
  ....
  ....
  ....
  // your code
  convertView.setTag(position);
  return convertView;
}

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        // TODO Auto-generated method stub
        if (arg0.isChecked()){
            int index = arg0.getTag();
            View v = listview.getItemAtPosition(index);
            // or  get the adapter get data list from it and then index it.

        }
    }
});

请注意:我没有在 oncheckedchange 方法中使用 final free。

于 2013-10-18T07:27:00.847 回答