[英]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;
}
}
在這個代碼不化妝holder
作為final
Object
我不能訪問它OnClickListener
。
如果我做它作為final
Object
,我不能啟動holder
像holder = new ViewHolder();
。
現在該怎么辦? 任何幫助將是非常可貴的。
謝謝,古娜
您還可以簡單地調整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();
}
您可以通過在匿名類之前添加一個臨時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);
}
});
或者,您可以使holder
為成員變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.