【问题标题】:E/RecyclerView: No adapter attached; skipping layout (Kotlin)E/RecyclerView:没有附加适配器;跳过布局(Kotlin)
【发布时间】:2020-11-30 10:34:41
【问题描述】:

我是编码新手。当我在活动中对它们进行编码时,该代码工作正常。但是当我尝试将它们更改为片段时,它会显示

E/RecyclerView: No adapter attached; skipping layout

我更改了以下编码。请帮助解决问题。提前致谢。

fragment_recycle.xml

<TextView
android:id="@+id/cat_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:text="@string/TextView"
android:textColor="@color/colorText"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/cat_item_recycler"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/cat_title" />

RecyclerFragment.kt

class RecyclerFragment : Fragment() {

companion object {
    fun newInstance() = RecyclerFragment()
    private var mainCategoryRecycler: RecyclerView? = null
    private var mainRecyclerAdapter: MainRecyclerAdapter? = null
}

private lateinit var viewModel: RecyclerViewModel

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_recycler, container, false)


    val categoryItemList1: MutableList<CategoryItem> = ArrayList()
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList2: MutableList<CategoryItem> = ArrayList()
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList3: MutableList<CategoryItem> = ArrayList()
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList4: MutableList<CategoryItem> = ArrayList()
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList5: MutableList<CategoryItem> = ArrayList()
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))

    val allCategory: MutableList<AllCategory> = ArrayList()
    allCategory.add(AllCategory(categoryTitle = "My Favourite", categoryItemList1))
    allCategory.add(AllCategory(categoryTitle = "Editor's Choice", categoryItemList2))
    allCategory.add(AllCategory(categoryTitle = "Promotion", categoryItemList3))
    allCategory.add(AllCategory(categoryTitle = "Nearby", categoryItemList4))
    allCategory.add(AllCategory(categoryTitle = "All Shops", categoryItemList5))


    setMainCategoryRecycler(allCategory)
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProvider(this).get(RecyclerViewModel::class.java)
    // TODO: Use the ViewModel
}

private fun setMainCategoryRecycler(allCategory: List<AllCategory>) {

    mainCategoryRecycler = main_recycler
    val layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(activity)
    mainCategoryRecycler!!.layoutManager = layoutManager
    mainRecyclerAdapter = activity?.let { MainRecyclerAdapter(it, allCategory) }
    mainCategoryRecycler!!.adapter = mainRecyclerAdapter
}

}

MainActivity.kt

class MainActivity() : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

lateinit var profileFragment: ProfileFragment
lateinit var walletFragment: WalletFragment
lateinit var favouriteFragment: FavouriteFragment
lateinit var contactFragment: ContactFragment
lateinit var settingFragment: SettingFragment
lateinit var recyclerFragment: RecyclerFragment



override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setSupportActionBar(toolBar)
    val actionBar = supportActionBar
    actionBar?.title = "Navigation Drawer"

    val drawerToggle: ActionBarDrawerToggle = object : ActionBarDrawerToggle(
        this,
        drawerLayout,
        toolBar,
        (R.string.open),
        (R.string.close)
    ) {

    }

    drawerToggle.isDrawerIndicatorEnabled = true
    drawerLayout.addDrawerListener(drawerToggle)
    drawerToggle.syncState()

    nav_view.setNavigationItemSelectedListener(this)
    recyclerFragment = RecyclerFragment()
    supportFragmentManager
        .beginTransaction()
        .replace(R.id.frame_layout, recyclerFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit()



}


    override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
        when (menuItem.itemId) {
            R.id.home -> {
                recyclerFragment = RecyclerFragment()
                supportFragmentManager
                        .beginTransaction()
                        .replace(R.id.frame_layout, recyclerFragment)
                        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                        .commit()
            }

            R.id.profile -> {
                profileFragment = ProfileFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, profileFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.wallet -> {
                walletFragment = WalletFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, walletFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.favourite -> {
                favouriteFragment = FavouriteFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, favouriteFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.contact -> {
                contactFragment = ContactFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, contactFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.setting -> {
                settingFragment = SettingFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, settingFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
        }
        drawerLayout.closeDrawer(GravityCompat.START)
        return true
    }

    override fun onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }
}

如果您需要什么,请告诉我。

更新

       at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
       at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
       at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
       at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
       at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
       at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
       at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
       at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
       at android.app.Activity.performStart(Activity.java:8024)
       at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475)
       at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
       at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
       at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
       at android.app.ActivityThread.main(ActivityThread.java:7656)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)


【问题讨论】:

  • 为什么onCreateView 里面的第一行有return?剩下的代码块没用。你没有收到警告吗?
  • 在 OnCreate View 中,您在顶部有 return 语句将其移至底部,否则将 return 语句之后的所有代码移至 onActivityCreated

标签: android android-fragments android-recyclerview android-adapter


【解决方案1】:

RecyclerFragmnet.kt 中,您需要在处理逻辑和路径视图后返回视图到setMainCategoryRecycler 方法

用这个更新你的代码

class RecyclerFragment : Fragment() {

  companion object {
    fun newInstance() = RecyclerFragment()
    private var mainCategoryRecycler: RecyclerView? = null
    private var mainRecyclerAdapter: MainRecyclerAdapter? = null
  }

  private lateinit var viewModel: RecyclerViewModel

  override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.fragment_recycler, container, false)


    val categoryItemList1: MutableList<CategoryItem> = ArrayList()
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))
    categoryItemList1.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList2: MutableList<CategoryItem> = ArrayList()
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))
    categoryItemList2.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList3: MutableList<CategoryItem> = ArrayList()
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))
    categoryItemList3.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList4: MutableList<CategoryItem> = ArrayList()
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))
    categoryItemList4.add(CategoryItem(1, R.drawable.logo))

    val categoryItemList5: MutableList<CategoryItem> = ArrayList()
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))
    categoryItemList5.add(CategoryItem(1, R.drawable.logo))

    val allCategory: MutableList<AllCategory> = ArrayList()
    allCategory.add(AllCategory(categoryTitle = "My Favourite", categoryItemList1))
    allCategory.add(AllCategory(categoryTitle = "Editor's Choice", categoryItemList2))
    allCategory.add(AllCategory(categoryTitle = "Promotion", categoryItemList3))
    allCategory.add(AllCategory(categoryTitle = "Nearby", categoryItemList4))
    allCategory.add(AllCategory(categoryTitle = "All Shops", categoryItemList5))


    setMainCategoryRecycler(view, allCategory)

    return view
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProvider(this).get(RecyclerViewModel::class.java)
    // TODO: Use the ViewModel
}

private fun setMainCategoryRecycler(view: View, allCategory: List<AllCategory>) {

    mainCategoryRecycler = view.main_recycler
    val layoutManager = LinearLayoutManager(requireContext(), RecyclerView.VERTICAL, false)
    mainCategoryRecycler!!.layoutManager = layoutManager
    mainRecyclerAdapter = activity?.let { MainRecyclerAdapter(it, allCategory) }
    mainCategoryRecycler!!.adapter = mainRecyclerAdapter
}

【讨论】:

  • 感谢您的回复。我已经更改了代码并在 setMainCategoryRecycler(view, allCategory) 和 val layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(activity) 处记录了“java.lang.NullPointerException”。其他地方也有问题。我会更新我的问题。
  • 当您使用 LinearLayoutManager 时,您需要路径上下文和方向。你可以使用 val layoutManager = LinearLayoutManager(requirecontext(), RecyclerView.Vertical, false) 而不是 val layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(activity)
  • 抱歉还是出现了java.lang.NullPointerException。我想我犯了一个错误。问题出现在 setMainCategoryRecycler(view, allCategory) 和 mainCategoryRecycler!!.layoutManager = layoutManager。问题也出现在我在问题中输入的更新中。感谢您的回复。 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2021-06-19
相关资源
最近更新 更多