RecyclerView 数据未显示
RecylerView Data not showing
我是 Kotlin 的新手,我有这段 Kotlin 代码,加载的数据一开始没有显示,但在导航到另一个 activity 并返回后,数据出现了。
在网上我查过他们说要添加 notifyOnChnaged 但我无法实现它,如果你知道如何添加 notifyOnChanged
或任何其他解决方案,请帮助我。
class SecretsActivity : AppCompatActivity() {
lateinit var bind : ActivitySecretsBinding
override fun onCreate(savedInstanceState: Bundle?) {
val secretsList = firebaseSecretsData()
super.onCreate(savedInstanceState)
bind = ActivitySecretsBinding.inflate(layoutInflater)
setContentView(bind.root)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
bind.secretsRecyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
bind.secretsRecyclerView.setHasFixedSize(true)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
bind.ButtonWrite.setOnClickListener {
val intent = Intent(this, WriteActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
}
override fun onBackPressed() {
super.onBackPressed()
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
private fun firebaseSecretsData() : List<SecretsModel>{
val list = ArrayList<SecretsModel>()
val dbref = FirebaseDatabase.getInstance().getReference("Secrets")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for(i in snapshot.children){
val item = SecretsModel(i.value.toString())
list+=item
}
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
return list
}
}
//Initialize this first
val myAdapter = SecretsAdapter(secretsList)
。
.
.
.
.
private fun firebaseSecretsData() : List<SecretsModel>{
val list = ArrayList<SecretsModel>()
val dbref =
FirebaseDatabase.getInstance().getReference("Secrets")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for(i in snapshot.children){
val item = SecretsModel(i.value.toString())
list+=item
}
//Add this code
myAdapter.notifyDataSetChanged()
}
}
。
.
.
.
.
此外,出于性能原因,您应该尽可能使用 DiffUtil
。
我是 Kotlin 的新手,我有这段 Kotlin 代码,加载的数据一开始没有显示,但在导航到另一个 activity 并返回后,数据出现了。
在网上我查过他们说要添加 notifyOnChnaged 但我无法实现它,如果你知道如何添加 notifyOnChanged
或任何其他解决方案,请帮助我。
class SecretsActivity : AppCompatActivity() {
lateinit var bind : ActivitySecretsBinding
override fun onCreate(savedInstanceState: Bundle?) {
val secretsList = firebaseSecretsData()
super.onCreate(savedInstanceState)
bind = ActivitySecretsBinding.inflate(layoutInflater)
setContentView(bind.root)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
bind.secretsRecyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
bind.secretsRecyclerView.setHasFixedSize(true)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
bind.ButtonWrite.setOnClickListener {
val intent = Intent(this, WriteActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
}
override fun onBackPressed() {
super.onBackPressed()
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
private fun firebaseSecretsData() : List<SecretsModel>{
val list = ArrayList<SecretsModel>()
val dbref = FirebaseDatabase.getInstance().getReference("Secrets")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for(i in snapshot.children){
val item = SecretsModel(i.value.toString())
list+=item
}
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
return list
}
}
//Initialize this first
val myAdapter = SecretsAdapter(secretsList)
。 . . . .
private fun firebaseSecretsData() : List<SecretsModel>{
val list = ArrayList<SecretsModel>()
val dbref =
FirebaseDatabase.getInstance().getReference("Secrets")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for(i in snapshot.children){
val item = SecretsModel(i.value.toString())
list+=item
}
//Add this code
myAdapter.notifyDataSetChanged()
}
}
。 . . . .
此外,出于性能原因,您应该尽可能使用 DiffUtil
。