android - 如何用 RecyclerView 替换 Fragment

标签 android android-fragments android-recyclerview

我有一个 RecyclerView,其中有数据和一个适配器来处理所有点击。当从 RecyclerView 中单击某个项目时,我有一个要加载的 fragment 。现在我想要的是当从同一个 Recycler View 中单击某个项目时,将 RecyclerView 替换为 Fragment。

我已经试过了,但它因错误而崩溃

适配器

holder.cvContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SingleContactFragment singleContactFragment = SingleContactFragment.newInstance(contact);
                FragmentTransaction transaction = ((Activity) context).getFragmentManager().beginTransaction();
                transaction.replace(R.id.rv_contact_list, singleContactFragment);
                transaction.commit();
            }
        });

其中 rv_contact_list 是当前的 RecyclerView。

错误是

01-19 20:35:01.892 13088-13088/com.xzii.pkg E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: com.xzii.pkg, PID: 13088
                                                          java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
                                                              at android.support.v7.widget.RecyclerView.findMinMaxChildLayoutPositions(RecyclerView.java:3869)
                                                              at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3604)
                                                              at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3408)

最佳答案

该错误基本上是提示分配给 RecyclerView 适配器的“上下文数据”。尝试将适配器设置为 null 并将其删除,然后添加新 fragment 。现在只有一个Kotlin示例代码。

val topicListFragment:TopicListFragment = supportFragmentManager.findFragmentById(R.id.topicListFragment) as TopicListFragment
topicListFragment.removeAdaptor()
supportFragmentManager.beginTransaction().remove(topicListFragment).commit()
val topicFragment = TopicFragment()
supportFragmentManager.beginTransaction().add(R.id.homeContent, topicFragment).commit()

清空适配器后,您可能不再需要删除 fragment ,logcat 显示

RecyclerView: No adapter attached; skipping layout

关于android - 如何用 RecyclerView 替换 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48346795/

相关文章:

Android:MediaPlayer何时调用release()方法

java - 使用 setContentView() 通过将 "string"传递到其参数来更改 xml 布局?

android - 如何在 Eclipse 中导入 Android Studio 项目?

java - (a)Smack 在登录时返回 "service-unavailable (503)"错误()

java - 如何阻止多个 Intent 依次打开?

c# - 找不到 fragment.inflate 的类

Android 应用启动时崩溃 : SQLite NullPointerException in ContactsFragment

android - 如何将点击监听器添加到我的回收站 View (Android kotlin)

android - 如何在 Android 中定位像 Google Play Store 或 Google Music 这样的 Recycler View

android - notifyItemChanged 不刷新 View