You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java安卓开发中GridView的BaseAdapter如何实现ViewBinding

BaseAdapter集成ViewBinding操作步骤

1. 前置配置(如已开启可跳过)

确保你的模块级build.gradle文件中已经开启ViewBinding功能,配置如下:

android {
    // 其他原有配置保持不变
    buildFeatures {
        viewBinding true
    }
}

修改后同步Gradle即可。

2. 改写MyAdapter类

我们通过ViewHolder存储ViewBinding实例,完全替代findViewById调用,改写后的代码如下:

public class MyAdapter extends BaseAdapter {

    Context c;
    int items[];

    MyAdapter(Context c, int arr[]) {
        this.c = c;
        items = arr;
    }
    
    @Override
    public int getCount() {
        return items.length;
    }

    @Override
    public Object getItem(int position) {
        return items[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        GridViewHolder holder;
        if (convertView == null) {
            // inflate子布局对应的Binding实例
            GridLayoutBinding binding = GridLayoutBinding.inflate(LayoutInflater.from(c), parent, false);
            holder = new GridViewHolder(binding);
            convertView = binding.getRoot();
            convertView.setTag(holder);
        } else {
            holder = (GridViewHolder) convertView.getTag();
        }
        // 直接通过Binding访问控件,无需findViewById
        holder.binding.imageView.setImageResource(items[position]);
        return convertView;
    }

    // ViewHolder存储Binding实例
    static class GridViewHolder {
        GridLayoutBinding binding;
        GridViewHolder(GridLayoutBinding binding) {
            this.binding = binding;
        }
    }
}

补充说明

  • 子布局文件名为grid_layout.xml,系统会自动生成对应的Binding类GridLayoutBinding,无需手动创建
  • 上述代码顺便修正了原代码中getItem、getItemId的返回值逻辑,更符合Adapter的开发规范
  • 你的MainActivity、各布局文件均无需做任何修改,改写后直接运行即可

内容的提问来源于stack exchange,提问作者Jishnu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:45:02