[英]access non final variable from anonymous inner class
public class FoodTypeAdapter extends BaseAdapter {
private Context context;
public FoodTypeAdapter(Context context) {
this.context = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.food_type_grid,
new LinearLayout(context));
holder = new ViewHolder();
holder.btnAdd = (Button) convertView.findViewById(R.id.btnItemAdd);
holder.etQty = (EditText) convertView.findViewById(R.id.etfItemQty);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String quantity = holder.etQty.getText().toString();
System.out.println(quantity);
}
});
return convertView;
}
public int getCount() {
return mylist.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
static class ViewHolder {
Button btnAdd;
EditText etQty;
}
}
In this code without make holder
as final
Object
I can't access it from OnClickListener
. 在这个代码不化妆
holder
作为final
Object
我不能访问它OnClickListener
。
If I make it as final
Object
I can't initiate holder
like holder = new ViewHolder();
如果我做它作为
final
Object
,我不能启动holder
像holder = new ViewHolder();
. 。
Now what can I do? 现在该怎么办? Any help will be highly appreciable.
任何帮助将是非常可贵的。
Thanks, Guna 谢谢,古娜
You also could have simply adjusted the initialization of holder
which reduced your code complexity by the way: 您还可以简单地调整
holder
的初始化,从而减少代码的复杂性:
final ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.food_type_grid,
new LinearLayout(context));
holder = new ViewHolder();
holder.btnAdd = (Button) convertView.findViewById(R.id.btnItemAdd);
holder.etQty = (EditText) convertView.findViewById(R.id.etfItemQty);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
You can work around it by adding a temporary final
variable before the anonymous class, and use that variable instead: 您可以通过在匿名类之前添加一个临时
final
变量来解决该问题,而改用该变量:
final ViewHolder finalHolder = holder; // <- added
holder.btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String quantity = finalHolder.etQty.getText().toString();
// ^^^^^^^^^^^
System.out.println(quantity);
}
});
Or, you could make holder
a member variable. 或者,您可以使
holder
为成员变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.