Android的RecyclerView一绑定Adapter就闪退

本文记录了一次在自定义Adapter时遇到的闪退问题及解决过程。在使用ButterKnife进行视图绑定时,将final关键字误用为@NonNull注解,导致应用程序崩溃。通过对比正常运行的代码,发现问题所在,并及时修正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,自定义adapter

在执行下面的语句时

  linearLayoutManager = new LinearLayoutManager(getActivity());
        goodListAdapter = new GoodListAdapter(getActivity(),goodList);
        goodListView.setLayoutManager(linearLayoutManager);
        goodListView.setAdapter(goodListAdapter);

立刻闪退,还没有提示!

排查了很久(主要是和之前没问题的做了个对比)

发现

 public GoodViewHolder(final View itemView) {
            super(itemView);
            ButterKnife.bind(this,itemView);
        }

final写成了@NonNull

我耶不知道为什么,就先记下来了

Android Studio中创建个包含QQ通讯录 ListView 的界面,可以按照以下步骤操作: 1. **设置项目结构**: - 首先,确保你的项目已经有了清单文件`activity_main.xml`用于布局,以及`strings.xml`和`styles.xml`等资源文件。 2. **设计 XML 布局**: 在 `activity_main.xml` 中,创建个 `LinearLayout` 或者 `RecyclerView` 作为主容器,因为它支持动态添加和删除视图。例如,如果你选择 `RecyclerView`: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> ``` 3. **创建 Adapter**: 创建个新的 Java 类(如`QqContactAdapter.java`),继承自 `RecyclerView.Adapter<YourViewHolder>`。这里假设你的 ViewHolder 类叫 `ContactViewHolder`。在 Adapter 中,你需要覆盖 `onCreateViewHolder()`、` onBindViewHolder()` 和 `getItemCount()` 方法。 4. **ViewHolder**: ``` public static class ContactViewHolder extends RecyclerView.ViewHolder { // 定义头像、姓名和签名的 View ImageView avatarImageView; TextView nameTextView; TextView signatureTextView; public ContactViewHolder(View itemView) { super(itemView); avatarImageView = itemView.findViewById(R.id.avatar_image_view); nameTextView = itemView.findViewById(R.id.name_text_view); signatureTextView = itemView.findViewById(R.id.signature_text_view); } } ``` 5. **填充数据**: 在 `onBindViewHolder()` 中,从数据库、网络或其他数据源获取联系人信息,并将它们设置到 ViewHolder 的视图上。同时,在这里处理点击事件监听器,比如当用户点击名字时显示 Toast 提示。 6. **加载数据到列表**: 在 `MainActivity.java` 的 `onCreate()` 方法中,实例化 RecyclerView,指定 Adapter 并将其绑定到视图: ```java QqContactAdapter adapter = new QqContactAdapter(this, contactList); // contactList是你从数据库获取的联系人列表 recyclerView.setAdapter(adapter); ``` 7. **处理点击事件**: 在 `QqContactAdapter` 中,给每个 ViewHolder 设置个 OnItemClickListener,然后在 `onClick()` 方法里显示 Toast: ```java @Override public void onClick(int position) { Contact contact = getItem(position); // 获取点击位置的数据 String name = contact.getName(); Toast.makeText(context, "你点击了:" + name, Toast.LENGTH_SHORT).show(); } ``` 8. **加载头像**: 如果头像是网络图片,记得在 `onBindViewHolder()` 中使用 Picasso、 Glide 或其他库异步加载图片。如果是在本地,设置 `android:src` 属性即可。 9. **测试和优化**: 确保在模拟器或真实设备上运行应用,检查列表是否正常显示,是否有闪退或错误。调试过程中,查看 Logcat 输出有助于定位问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值