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
相关产品推荐
相关产品推荐

