Java 从匿名内部类访问非final变量
在这段代码中,如果没有makeJava 从匿名内部类访问非final变量,java,android,Java,Android,在这段代码中,如果没有makeholder作为final对象,我无法从OnClickListener访问它 如果我将其设置为final对象我不能像holder=newviewholder()那样启动holder 现在我能做什么?任何帮助都是非常值得的 谢谢, Guna您可以通过在匿名类之前添加临时final变量来解决此问题,并改用该变量: public class FoodTypeAdapter extends BaseAdapter { private Context context; pu
holder
作为final
对象,我无法从OnClickListener
访问它
如果我将其设置为final
对象
我不能像holder=newviewholder()那样启动holder
代码>
现在我能做什么?任何帮助都是非常值得的
谢谢,
Guna您可以通过在匿名类之前添加临时final
变量来解决此问题,并改用该变量:
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;
}
}
final ViewHolder finalHolder=holder;// 您还可以简单地调整holder
的初始化,通过以下方式降低代码复杂性:
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);
}
});
添加一个临时的final变量并将其分配给holder
,并在内部类中使用此临时变量。只需尝试以下方法:holder.btnAdd.setTag(holder.etQty.getText().toString())。好的,朋友,获取它,谢谢。等待13分钟。我将接受。final
变量无法以这种方式初始化。这根本不是真的。我无法为您获取friendfinal字符串s;if(new Random().nextInt()==1){s=“1”}else{s=“not 1”}System.out.println(“s=[“+s+”])代码>只需编译并学习即可。您的代码可以工作,但eclipse说,像一样,无法指定最终的局部变量持有者。它必须为空且不使用复合赋值
。谢谢你的信息。
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();
}