Android Firebase Recyclerview(垂直滚动)始终从另一个活动中单击后退按钮滚动至开始
不知道为什么会出现这种行为,但几乎尝试了所有方法,如果您知道问题的解决方法,请告诉我 当我通过单击“上一步”按钮从SellerAddNewProductActivity返回时,RecyclerView始终滚动到开始Android Firebase Recyclerview(垂直滚动)始终从另一个活动中单击后退按钮滚动至开始,android,firebase,kotlin,android-recyclerview,Android,Firebase,Kotlin,Android Recyclerview,不知道为什么会出现这种行为,但几乎尝试了所有方法,如果您知道问题的解决方法,请告诉我 当我通过单击“上一步”按钮从SellerAddNewProductActivity返回时,RecyclerView始终滚动到开始 class SellerHomeFragment : Fragment() { private var searchInputText:String = "" private var sellerProductsViewListRecyclerVi
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()
}
}
class SellerHomeFragment:Fragment(){
private var searchInputText:String=“”
私有变量sellerProductsViewListRecyclerView:RecyclerView?=null
私有变量layoutManager:RecyclerView.layoutManager?=null
私有变量滚动\u状态:可包裹?=null
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
val root=充气机。充气(R.layout.fragment\u seller\u home,container,false)
sellerProductsViewListRecyclerView=root.findViewById(R.id.seller\u products\u view\u list)
layoutManager=LinearLayoutManager(this.context)
sellerProductsViewListRecyclerView?.layoutManager=layoutManager
val searchText:EditText=root.findViewById(R.id.seller\u search\u product\u name)
val searchProductsBtn:Button=root.findviewbyd(R.id.seller\u search\u products\u btn)
val sellerViewByProductState:Spinner=root.findViewById(R.id.seller\u view\u by\u product\u state)
sellerViewByProductState.setSelection(0)
searchProductsBtn.setOnClickListener{
searchInputText=searchText.text.toString()
createProductRecyclerView()
}
sellerViewByProductState?.onItemSelectedListener=对象:AdapterView.onItemSelectedListener{
覆盖未选择的乐趣(家长:AdapterView?){
}
覆盖已选择(父项:AdapterView?,视图:view?,位置:Int,id:Long){
createProductRecyclerView()
}
}
返回根
}
重写onResume(){
super.onResume()
如果(滚动状态!=null){
SellerProductsView!!.layoutManager!!.onRestoreInstanceState(滚动状态)
}
}
覆盖暂停(){
super.onPause()
scroll\u state=SellerProductsView!!.layoutManager!!.onSaveInstanceState()
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
createProductRecyclerView()
}
私人娱乐createProductRecyclerView(){
var productRef:DatabaseReference=FirebaseDatabase.getInstance().reference.child(
产品名称
)
变量选项:FirebaseRecyclerOptions?=null
val sellerViewByProductState:微调器=
RequireReview().findViewById(R.id.Sellers\u view\u by\u product\u state)
val selectedProductState=sellerViewByProductState.selectedItem.toString()
选项=FirebaseRecyclerOptions.Builder().setQuery(
productRef.child(selectedProductState).orderByChild(SID\U属性)
.equalTo(FirebaseAuth.getInstance().currentUser!!.uid),Products::class.java
).setLifecycleOwner(this.build())
val适配器=对象:FirebaseRecyclerAdapter(选项){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):ProductViewHolder{
返回产品视图持有者(
LayoutInflater.from(parent.context)
.充气(R.layout.product\u items\u layout,父项,false)
)
}
BindViewHolder上的受保护覆盖功能(
持有者:ProductViewHolder,
职位:Int,
型号:产品
) {
holder.txtProductName.text=model.pname
holder.txtProductDescription.text=model.description
holder.txtProductPrice.text=“价格=₹ " + model.price.toString()
val context=holder.itemView.context
毕加索(this@SellerHomeFragment.context).load(model.image).networkPolicy(
NetworkPolicy.OFFLINE
).tag(context).into(holder.imageView,
对象:回调{
覆盖成功的乐趣(){
}
重写错误(){
毕加索(this@SellerHomeFragment.context).load(model.image)
.into(holder.imageView)
}
})
holder.itemView.setOnClickListener{
val intent:intent=intent(
this@SellerHomeFragment.context,
SellerAddNewProductActivity::class.java
)
intent.putExtra(“类别”,model.category)
intent.putExtra(“pid”,model.pid)
val sellerViewByProductState:微调器=
RequireReview().findViewById(R.id.Sellers\u view\u by\u product\u state)
val existingProductState=sellerViewByProductState.selectedItem.toString()
intent.putExtra(“existingProductState”,existingProductState)
星触觉(意图)
}
}
}
sellerProductsViewListRecyclerView?.setAdapter(适配器)
adapter.startListening()
}
}
我不确定我是否理解您的代码,但我认为如果在添加产品后调用函数setAdapter(adapter),则需要重新加载适配器。
将项添加到适配器时,请在适配器上使用函数notifyItemInserted()或notifyItemRangeSerted(位置、范围)。我不确定是否理解您的代码,但我认为,如果在添加产品后调用函数setAdapter(适配器),则会重新加载适配器。 将项添加到适配器时,请在适配器上使用函数notifyItemInserted()或notifyItemRangeSerted(位置、范围)