【发布时间】:2020-01-22 16:50:55
【问题描述】:
我知道有很多与我类似的问题的帖子,我什至关注了this 和this 以及其他帖子(虽然我不会在这里列出每一个帖子)并尝试了不同的事情,但我仍然无法让我的recyclerview 在我的Fragment 上显示任何内容。
我编写一个应用程序主要用于学习目的 - 类似于 this,只是为了了解事物如何协同工作。如果你喜欢看这个项目,(至少我到目前为止所做的),你可以这样做here。
我只想在recyclerview 上显示项目。目前,recyclerview 中的任何内容都不会显示在 Fragment 中,只有白色背景:(。
我什至没有收到 任何 错误,例如“未连接适配器;跳过布局”或“未连接 LayoutManager;跳过布局”。我相信这可能是一个非常小的问题,所以请你解释一下我错过了什么或做错了什么。
非常感谢您的努力。
这是我的工作:
Adapter 代码:
class ActivitiesAdapter internal constructor(
context: Context
) : RecyclerView.Adapter<ActivitiesAdapter.ActivitiesViewHolder>() {
private val inflater: LayoutInflater = LayoutInflater.from(context)
private var activities = emptyList<DoItAgainEntity>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ActivitiesViewHolder {
val itemView = inflater.inflate(R.layout.recyclerview_item, parent, false)
return ActivitiesViewHolder(itemView)
}
override fun onBindViewHolder(holder: ActivitiesViewHolder, position: Int) {
val current = activities[position]
holder.activityItemView.text = current.engagement
}
internal fun setActivities(activities: List<DoItAgainEntity>) {
this.activities = activities
notifyDataSetChanged()
}
override fun getItemCount() = activities.size
inner class ActivitiesViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview) {
val activityItemView: TextView = itemview.findViewById(R.id.textView)
}
}
Fragment 代码:
class ShowDBEntriesFragment : Fragment() {
private lateinit var viewModel: ShowDBEntriesViewModel
private lateinit var layout: View
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: ActivitiesAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
layout = inflater.inflate(R.layout.show_dbentries_fragment, container, false)
adapter = ActivitiesAdapter(context!!)
recyclerView = layout.findViewById(R.id.recyclerview)
recyclerView.addItemDecoration(
DividerItemDecoration(
context!!,
LinearLayoutManager.VERTICAL
)
)
recyclerView.layoutManager =
LinearLayoutManager(context!!, LinearLayoutManager.VERTICAL, false)
recyclerView.adapter = adapter
return layout
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(ShowDBEntriesViewModel::class.java)
fab.setOnClickListener {
val fragmentManager = (activity as MainActivity).supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val fragment = InsertNewEngagementFragment()
fragmentTransaction.replace(R.id.fragment_newEngagement, fragment)
fragmentTransaction.commit()
}
}
}
来自recyclerview_item.xml 的xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
style="@style/activity_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_orange_light" />
</LinearLayout>
【问题讨论】:
-
您没有为适配器设置任何数据
-
您在数据库中插入了任何数据吗?
-
@Md. Asaduzzaman 感谢您的帮助。我已经在我的数据库中填充了数据。
suspend fun populateDatabase(doItAgainDao: DoItAgainDao) { doItAgainDao.deleteAll() var engagement = DoItAgainEntity(1, "play guitar", 100) doItAgainDao.insert(engagement) engagement = DoItAgainEntity(2, "make breakfast", 2) doItAgainDao.insert(engagement) engagement = DoItAgainEntity(2, "go out with friends", 20) doItAgainDao.insert(engagement) }
标签: android android-fragments kotlin android-recyclerview