My Firebase recycler view always refreshes and loses its scroll position when opening new activity and coming back. Tried multiple solution in Stack Overflow but none woks for me. Here is my code
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);
}
}