我有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
应该是最终的(但我不能)
任何提示?
答案 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()));
}