recyclerview 上没有显示任何项目

Posted

技术标签:

【中文标题】recyclerview 上没有显示任何项目【英文标题】:No items are displayed on recyclerview 【发布时间】:2021-09-02 01:03:15 【问题描述】:

我正在从 api 获取数据并将其显示在 recyclerview 上。我已经检查了许多其他相同问题的查询,但我似乎无法找到解决此问题的方法。

下面是我的活动课

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

    val retrofit = RetrofitClient.instance
    jsonApi = retrofit.create(MyApi::class.java)

    fetchRecyclerData()



private fun fetchRecyclerData() 
    compositeDisposable?.add(jsonApi.posts
        .subscribeOn(Schedulers.io())
        .observeOn(androidSchedulers.mainThread())
        .subscribeposts->displayData(posts))



private fun displayData(posts: List<Post>?) 
    val adapter = PostAdapter(this,posts!!)
    recyclerView.adapter = adapter
    recyclerView.layoutManager = LinearLayoutManager(this)
    recyclerView.setHasFixedSize(true)
    adapter.notifyDataSetChanged()



下面是我的适配器

class PostAdapter(internal var context: Context, internal var 
postList:List<Post>):RecyclerView.Adapter<PostViewHolder>()


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostViewHolder 
    val itemView = LayoutInflater.from(parent.context).inflate(R.layout.post_layout,parent,false)
    return PostViewHolder(itemView)


override fun onBindViewHolder(holder: PostViewHolder, position: Int) 
   holder.tvAuthor.text = postList[position].userId.toString()
    holder.tvContent.text = StringBuilder(postList[position].body.substring(0,20))
        .append("...").toString()
    holder.tvTitle.text = postList[position].title


override fun getItemCount(): Int 
    return postList.size


Logcat

     06-17 13:29:06.047 23952-23952/com.malikali.kotlinxrxjava2xretrofit2 W/RecyclerView: No adapter attached; skipping layout
     06-17 13:29:06.057 23952-23952/com.malikali.kotlinxrxjava2xretrofit2 W/RecyclerView: No adapter attached; skipping layout

下面是我的 xml 文件。我仍然不明白在这种情况下做错了什么。

   <?xml version="1.0" encoding="utf-8"?>
  <androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_
    android:layout_
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

  </androidx.constraintlayout.widget.ConstraintLayout>

【问题讨论】:

【参考方案1】:

提交数据后,您应该始终在适配器上调用notifyDataSetChanged(),因此请像这样更改您的代码:

private fun displayData(posts: List<Post>?) 
    val adapter = PostAdapter(this,posts!!)
    recyclerView.adapter = adapter
    recyclerView.layoutManager = LinearLayoutManager(this)
    recyclerView.setHasFixedSize(true)
    adapter.notifyDataSetChanged()



【讨论】:

@Mkhapaki 我试过我只是忘了在代码中包含它。还是不显示【参考方案2】:

还请分享您的 xml。三种可能的情况 1:回收站视图的高度或宽度必须为 0 2:“帖子”列表为空 3:在订阅中做日志,看看是否没有抛出任何异常,否则执行rxjava的错误以检查可能的异常

【讨论】:

以上是关于recyclerview 上没有显示任何项目的主要内容,如果未能解决你的问题,请参考以下文章

如何解决这个rec ylerview问题?我的代码中有任何错误吗?在应用程序中唱歌后运行时崩溃

RecyclerView 不显示项目

如何在recyclerView(没有按钮)中单击项目时播放歌曲?

如何在 RecyclerView android kotlin 中的每个项目上显示日期(日和月)

Recyclerview 项目没有以相同的高度显示

RecyclerView 显示两个突出显示的项目