我正在尝试为我的Android应用中的某些元素设置OnClickListener
,这些元素是动态定义的,并没有给出id
,但是它们放在LinearLayouts
中它存在于List
LinearLayouts
中,因此我将OnClickListener
设置如下:
List<LinearLayout> inner_ver = setElemets(1);
for (LinearLayout l: inner_ver){
l.getChildAt(0).setOnClickListener(new OnClickListener() { // here's the syntax error
@Override
public void onClick(View v) {
l.getChildAt(1).setBackgroundResource(R.drawable.home_curtopen);
}
});
}
但是我在l
标题中提到了语法错误,我不能将其声明为final
因为它只将更改分配给{{1}中的最后一个元素}。
答案 0 :(得分:4)
分成单独的方法:
for (LinearLayout l: inner_ver){
assignListener(l);
}
public void assignListener(final LinearLayout l) {
l.getChildAt(0).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
l.getChildAt(1).setBackgroundResource(R.drawable.home_curtopen);
}
});
}
答案 1 :(得分:3)
您还可以创建自己的OnClickListener类:
class MyOnClickListener implements OnClickListener{
private LinearLayout layout;
public MyOnClickListener(LinearLayout layout){
this.layout = layout;
}
@Override
public void onClick(View v) {
layout.getChildAt(1).setBackgroundResource(R.drawable.home_curtopen);
}
}
然后将你的循环改为:
for (LinearLayout l: inner_ver){
l.getChildAt(0).setOnClickListener(new MyOnClickListener(l));
}
答案 2 :(得分:1)
您可以将final
添加到for循环
List<LinearLayout> inner_ver = setElemets(1);
for (final LinearLayout l: inner_ver){
l.getChildAt(0).setOnClickListener(new OnClickListener() { // here's the syntax error
@Override
public void onClick(View v) {
l.getChildAt(1).setBackgroundResource(R.drawable.home_curtopen);
}
});
}
中解释了为什么
for(final Type name : Iterable)
有效