android - 无法将监听器添加到膨胀表 -

时间:2011-02-18 08:03:30

标签: android android-widget

我有一个用XML定义的表和一个将视图定义为另一个XML的行。假设我需要用5行填充表格。运行以下代码:

  final ViewGroup table = (TableLayout)findViewById(R.id.table);

  View row = null;

  TextView title = null;

  for(int i=0; i<5; i++)

  {

       row = LayoutInflater.from(this).inflate(R.layout.row, null, false);

       title = (TextView)row.findViewById(R.id.text_title);

       title.setText("val");
       ImageView x= (ImageView)itemView.findViewById(R.id.remove);
       x.setOnClickListener(delimg);

       table.addView(row);

  }
  private OnClickListener delimg = new OnClickListener() { 


    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        TextView tv = (TextView) findViewById(R.id.pname);   
                    tv.setText("Deleted item!");  

    } 
}; 

它工作正常但是当我尝试将onclicklistener添加到图像时,它只更改第一行而不是corressponding行。请帮忙。

1 个答案:

答案 0 :(得分:0)

itemView来自哪里?假设你想要为你的行设置监听器的ImageView,你可以尝试改变:

ImageView x= (ImageView)itemView.findViewById(R.id.remove);

ImageView x= (ImageView) row.findViewById(R.id.remove);

它是否适用于这种变化?


编辑:我想我在这里对这个问题做了错误的假设。我以为你有一个名为pname的TextView,。如果按下第0行的图像,文本将更新,但如果按下第1-4行,则不会发生任何事情。我没有看到会导致这种情况的原因。

我可能误读了“它只会改变第一行”。在每行中是否有pname,并且无论您单击哪一行,文本都会在第一行中更改?如果是这样,那么您需要将onClick()更改为:

TextView tv = (TextView) arg0.findViewById(R.id.pname);   
        tv.setText("Deleted item!");  

否则,它会在整个活动中找到第一个带有该ID的项目。