【问题标题】:RecyclerView becomes empty after coming back to a destroyed activity回到被破坏的活动后,RecyclerView 变空
【发布时间】:2021-03-19 23:11:09
【问题描述】:

我有一个 recyclerview,它从 Firebase 数据库 中读取人员列表并将他们显示在布局中。当我第一次访问该活动时,一切都按预期进行,但是当我使用 BackButton 完成活动并尝试再次访问该活动时,recyclerview 变为空。 请注意,我尝试通过使用 SingleValueEvent 的侦听器以编程方式添加人员。

    class myActivity : AppCompatActivity() {

    private var index = 0

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

        Firebase.database.setPersistenceEnabled(true)
        val database = Firebase.database("mydatabase")
        val myRef = database.getReference("People")


        val peopleList = ArrayList<MyPeopleListAdapter.MyPeopleItem>()

        val code = intent.getStringExtra("key")

        val recview = findViewById<RecyclerView>(R.id.recyclerViewF)
        recview.layoutManager = LinearLayoutManager(this)

        val adapter = MyPeopleListAdapter(peopleList)
        recview.adapter = adapter
        recview.setHasFixedSize(true)


        myRef.addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {


                val ref = snapshot.child(code.toString()).getValue<Map<String, *>>()

                val peopleListRef = snapshot.child(code.toString()).child("PeopleList")

                peopleListRef.children.forEach {
                    val hash = it.getValue<Map<String,*>>()
                    val pId = it.key
                    val pFull = hash!!["Name"].toString()
                    val pEmail = hash["Email"].toString()
                    val pPic = hash["Pic"].toString()
                    val pS = hash["S"].toString()


                    peopleList.add(index, MyPeopleListAdapter.MyPeopleItem( 
                        pId.toString(),
                        pPic,
                        pFull,
                        pEmail,
                        pS))

                    adapter.notifyItemInserted(index)

                    index += 1

                }

            }

            override fun onCancelled(error: DatabaseError) {
                println(error.message)
            }
        })
    }

    override fun onBackPressed() {
        super.onBackPressed()

        finish()
    }
}

【问题讨论】:

    标签: android kotlin android-activity android-recyclerview android-adapter


    【解决方案1】:

    问题在于回收站视图没有实现 scrollToPosition() 方法。所以通知适配器后,调用scroll方法,代码变成:

    // ... 
    
        adapter.notifyItemInserted(index)
        recview.scrollToPosition(0)
    
    // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2013-04-07
      相关资源
      最近更新 更多