ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the at

如果在使用Recyclerview的时候出现下面的异常

ViewHolder views must not be attached when created. Ensure that you are not passing ‘true’ to the attachToRoot parameter of LayoutInflate

这说明onCreateViewHolder 方法写错了
这句话的意思是,viewHolder不予许在创建的时候添加到parent里,所以如果在onCreateViewHolder方法里使用:

// View view = inflater.inflate(R.layout.item_view, parent, true);或者
// View view = inflater.inflate(R.layout.item_view, parent);

就会报错n: ViewHolder views must not be attached when created. Ensure that you are not passing ‘true’ to the attachToRoot parameter of LayoutInflate

只要改成:
// View view = inflater.inflate(R.layout.item_view, null); 或者
// View view = inflater.inflate(R.layout.item_view, parent, false);
即可

那么这三个参数是什么意思呢?

    public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) 

第一个参数是传入的布局参数
第二个参数是这个布局的父布局
第三个就是是否要将这个布局加载到父布局里

1、如果root为null,那么第三个参数传入true和false都无影响,因为当root为null的时候就用不到attachToRoot参数,这个布局的最外层参数也就没有效果了。
2、如果root不为null
2.1 attachToRoot = true,布局的最外层属性会生效并且会添加到root中,返回的view是父布局
        View result = root;
        return result;
2.2 attachToRoot = false,布局会添加到root中,当布局被添加到root中的时候,布局的最外层属性会生效。返回的view是resource指定的布局
		if (root == null || !attachToRoot) {
			result = temp;
		}
		return result;

完毕(#^ . ^#)

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误是因为 SimpleAdapter 无法将 TextureView 视为视图来绑定。解决方案是使用自定义适配器(Custom Adapter),并在适配器的 getView() 方法中手动绑定 TextureView。以下是示例代码: ```java public class CustomAdapter extends BaseAdapter { private Context mContext; private List<MyData> mDataList; public CustomAdapter(Context context, List<MyData> dataList) { mContext = context; mDataList = dataList; } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int position) { return mDataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder holder; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); holder = new ViewHolder(); holder.textureView = (TextureView) view.findViewById(R.id.texture_view); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } // Bind TextureView here MyData data = mDataList.get(position); holder.textureView.setSurfaceTexture(data.getSurfaceTexture()); return view; } private static class ViewHolder { TextureView textureView; } } ``` 在这个示例中,我们创建了一个自定义适配器 CustomAdapter,其中包含一个名为 ViewHolder 的内部类,用于保存视图的引用。在 getView() 方法中,我们手动绑定 TextureView,然后返回视图。 使用自定义适配器后,可以像这样设置列表视图: ```java List<MyData> dataList = getDataList(); CustomAdapter adapter = new CustomAdapter(this, dataList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); ``` 其中,getDataList() 方法根据您的需要返回数据列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值