android - 单击其他 Activity 中的后退按钮时,Firebase Recyclerview(垂直滚动)始终滚动到开始

标签 android firebase kotlin android-recyclerview

不知道为什么会这样,但是几乎尝试了所有方法,如果您知道此问题的解决方法,请告诉我
当我通过单击“后退”按钮从SellerAddNewProductActivity返回时,RecyclerView始终滚动到开头

class SellerHomeFragment : Fragment() {
    private var searchInputText:String = ""
    private var sellerProductsViewListRecyclerView: RecyclerView? = null
    private var layoutManager: RecyclerView.LayoutManager? = null
    private var scroll_state: Parcelable? = null
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val root = inflater.inflate(R.layout.fragment_seller_home, container, false)
        sellerProductsViewListRecyclerView = root.findViewById(R.id.seller_products_view_list)
        layoutManager = LinearLayoutManager(this.context)
        sellerProductsViewListRecyclerView?.layoutManager = layoutManager
        val searchText: EditText = root.findViewById(R.id.seller_search_product_name)
        val searchProductsBtn: Button = root.findViewById(R.id.seller_search_products_btn)
        val sellerViewByProductState: Spinner = root.findViewById(R.id.seller_view_by_product_state)
        sellerViewByProductState.setSelection(0)
        searchProductsBtn.setOnClickListener {
            searchInputText = searchText.text.toString()
            createProductRecyclerView()
        }
        sellerViewByProductState?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                createProductRecyclerView()
            }

        }
        return root
    }

    override fun onResume() {
        super.onResume()
        if(scroll_state!=null){
            sellerProductsViewListRecyclerView!!.layoutManager!!.onRestoreInstanceState(scroll_state)
        }
    }

    override fun onPause() {
        super.onPause()
        scroll_state = sellerProductsViewListRecyclerView!!.layoutManager!!.onSaveInstanceState()
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        createProductRecyclerView()
    }

    private fun createProductRecyclerView() {
        var productRef: DatabaseReference = FirebaseDatabase.getInstance().reference.child(
            PRODUCTS_DB_NAME
        )
        var options: FirebaseRecyclerOptions<Products>? = null
        val sellerViewByProductState: Spinner =
            requireView().findViewById(R.id.seller_view_by_product_state)
        val selectedProductState = sellerViewByProductState.selectedItem.toString()
        options = FirebaseRecyclerOptions.Builder<Products>().setQuery(
            productRef.child(selectedProductState).orderByChild(SID_PROPERTY)
                .equalTo(FirebaseAuth.getInstance().currentUser!!.uid), 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@SellerHomeFragment.context).load(model.image).networkPolicy(
                    NetworkPolicy.OFFLINE
                ).tag(context).into(holder.imageView,
                    object : Callback {
                        override fun onSuccess() {
                        }

                        override fun onError() {
                            Picasso.with(this@SellerHomeFragment.context).load(model.image)
                                .into(holder.imageView)
                        }
                    })
                holder.itemView.setOnClickListener {
                    val intent: Intent = Intent(
                        this@SellerHomeFragment.context,
                        SellerAddNewProductActivity::class.java
                    )
                    intent.putExtra("category", model.category)
                    intent.putExtra("pid", model.pid)
                    val sellerViewByProductState: Spinner =
                        requireView().findViewById(R.id.seller_view_by_product_state)
                    val existingProductState = sellerViewByProductState.selectedItem.toString()
                    intent.putExtra("existingProductState", existingProductState)
                    startActivity(intent)
                }
            }
        }
        sellerProductsViewListRecyclerView?.setAdapter(adapter)
        adapter.startListening()
    }
}

最佳答案

我不确定我是否理解您的代码,但是我认为如果在添加产品后调用函数setAdapter(adapter),则会重新加载适配器。
将项目添加到适配器时,请在适配器上使用函数notifyItemInserted()或notifyItemRangeInserted(position,range)。

关于android - 单击其他 Activity 中的后退按钮时,Firebase Recyclerview(垂直滚动)始终滚动到开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62492095/

相关文章:

java - Kotlin 。如何通过反射检查该字段是否可以为空?

java - Proguard 是否删除未使用的代码(在 Android 上)

android如何在现有布局中绘制图形

javascript - 使用 Firebase 更新文档字段时使用 Object.assign

android - Kotlin和Retrofit:如何处理HTTP 400响应?

android - ConstraintLayout的组可见性不会更改其引用 View 的可见性

android - 表布局中的单选组,单选按钮与列对齐

java - Android 以编程方式创建列表

Angular 6,Firebase 3.9.0 - 全局未在 node_modules/firebase/auth.js 中定义

javascript - Firestore : What is the efficient way to list messages in chat?