java - 从匿名内部类访问非最终变量

标签 java android

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 = new ViewHolder(); 那样启动 holder.

现在我能做什么?任何帮助都将非常感激。

谢谢, 古纳

最佳答案

您还可以简单地调整 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();
}

关于java - 从匿名内部类访问非最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361698/

相关文章:

java - 在 JList 中锁定选择

java - 解决Maven依赖收敛问题

java - 在字符串中搜索子字符串

android - CameraX - 无法配置相机

java - 为具有不同对象的嵌套 json 改造 gson 转换器

java - Android,使用proguard和序列化

android - 将Android Studio更新为0.5.3 gradle错误

android - 如何仅获取类名,而不是完整路径?

java - 检查 Firebase 数据库中是否存在数据

android - 各种安卓模拟器