【发布时间】: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