【发布时间】:2020-10-03 15:52:06
【问题描述】:
我的 Firebase 回收器视图在打开新活动并返回时总是刷新并丢失其滚动位置。在 Stack Overflow 中尝试了多种解决方案,但没有一个适合我。这是我的代码
class HomeActivity : AppCompatActivity() {
private var layoutManager:RecyclerView.LayoutManager? = null
private var recyclerViewState: Parcelable? = null
private var recyclerView:RecyclerView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
recyclerView = findViewById(R.id.recycler_menu)
layoutManager = LinearLayoutManager(this)
recyclerView!!.layoutManager = layoutManager
}
override fun onStart() {
super.onStart()
var productRef: DatabaseReference = FirebaseDatabase.getInstance().reference.child(PRODUCTS_DB_NAME).child(
PRODUCT_STATE_ACTIVE)
var options:FirebaseRecyclerOptions<Products>? = null
options = FirebaseRecyclerOptions.Builder<Products>().setQuery(productRef, Products::class.java).
setLifecycleOwner(this).build()
val adapter = object : FirebaseRecyclerAdapter<Products, ProductViewHolder>(options) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
return ProductViewHolder(LayoutInflater.from(parent.context)
.inflate(R.layout.product_items_layout, parent, false))
}
protected override fun onBindViewHolder(holder: ProductViewHolder, position: Int, model: Products) {
holder.txtProductName.text = model.pname
holder.txtProductDescription.text = model.description
holder.txtProductPrice.text = "Price = ₹ " + model.price.toString()
val context = holder.itemView.context
Picasso.with(this@HomeActivity).load(model.image).networkPolicy(NetworkPolicy.OFFLINE).into(holder.imageView,
object: Callback {
override fun onSuccess() {
}
override fun onError() {
Picasso.with(this@HomeActivity).load(model.image).into(holder.imageView)
}
})
holder.itemView.setOnClickListener {
val intent:Intent = Intent(this@HomeActivity, ProductDetailsActivity::class.java)
intent.putExtra("pid", model.pid)
startActivity(intent)
}
}
}
val recyclerView:RecyclerView = findViewById(R.id.recycler_menu)
recyclerView.setAdapter(adapter)
adapter.startListening()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
recyclerViewState = recyclerView!!.getLayoutManager()!!.onSaveInstanceState();
}
override fun onResume() {
super.onResume()
recyclerView!!.getLayoutManager()!!.onRestoreInstanceState(recyclerViewState);
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
recyclerView!!.getLayoutManager()!!.onRestoreInstanceState(recyclerViewState);
}
}
【问题讨论】:
标签: android firebase kotlin android-recyclerview