用于多个TextView的代码setOnClickListener

时间:2013-10-25 09:16:37

标签: android

我有40多个TextViews并且我想在其上添加click个事件,但我会尝试“很快”:

final GridLayout myGL;
myGL = (GridLayout) v0725.findViewById( R.id.tab1 );
for(  int i = 0; i < myGL.getChildCount(); i++ )
      if ( getResources().getResourceEntryName(((TextView) myGL.getChildAt(i)).getId()).indexOf("v")==0 ) {
          ((TextView) myGL.getChildAt(i)).setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

                    Log.v("edf", getResources().getResourceEntryName(((TextView) myGL.getChildAt(i)).getId()));

        }
    });
};

但是Eclipse阻止了Log.v行,因为i应该是最终的(但我不能) 任何提示?

2 个答案:

答案 0 :(得分:1)

你的活动必须实现:

public class YourActivity implements View.OnClickListener 

并且必须覆盖方法onClick(视图视图):

public void onClick(View view) {
   Log.v("edf", getResources().getResourceEntryName(view.getId())); 
}

和你的循环:

for(int i = 0; i < myGL.getChildCount(); i++) {
  if (getResources().getResourceEntryName(((TextView) myGL.getChildAt(i)).getId()).indexOf("v")==0 ) {
       myGL.getChildAt(i).setOnClickListener(this);
    }
});

答案 1 :(得分:0)

您需要声明字段final,以便编译器保证在匿名内部类的生命周期内值不会更改。由于我被用作循环计数器,因此非常确定该值会发生变化。

因此,您需要将i的值复制到标记为final的变量。

for(  int i = 0; i < myGL.getChildCount(); i++ ) {
    final int j = i;
    ...
             Log.v("edf", getResources().getResourceEntryName(((TextView) myGL.getChildAt(j)).getId()));

}