RecyclerView 回到销毁后变空 activity
RecyclerView becomes empty after coming back to a destroyed activity
我有一个 recyclerview 从 Firebase 数据库 中读取人员列表并将其显示在布局上。当我第一次访问 activity 时,一切都按预期进行,但是当我使用 BackButton 完成 activity 并尝试再次访问时到 activity,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()
}
}
问题是回收器视图没有实现 scrollToPosition() 方法。所以通知adapter后,调用scroll方法,代码变为:
// ...
adapter.notifyItemInserted(index)
recview.scrollToPosition(0)
// ...
我有一个 recyclerview 从 Firebase 数据库 中读取人员列表并将其显示在布局上。当我第一次访问 activity 时,一切都按预期进行,但是当我使用 BackButton 完成 activity 并尝试再次访问时到 activity,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()
}
}
问题是回收器视图没有实现 scrollToPosition() 方法。所以通知adapter后,调用scroll方法,代码变为:
// ...
adapter.notifyItemInserted(index)
recview.scrollToPosition(0)
// ...