我有一个产品列表页面。 recyclerview 充满了来自 Firebase Firestore 的数据。当我点击任何产品时,它会转到详细信息页面。
view.findNavController().navigate(R.id.action_nav_products_to_productDetailFragment, bundle)
但是如果我点击后退按钮,我会调用 popBackStack() 并返回到上一个屏幕并重新加载。
findNavController().popBackStack()
如果我也点击系统后退按钮,也会发生同样的行为。
我查看了一些其他 Stackoverflow 帖子并遵循了一些答案。但没有任何帮助。
我尝试过的一个是,在 onCreateView 我检查适配器初始化,如果已经初始化,它不会设置 recylerview 的适配器。但是应用这个逻辑后,我才知道,即使我不将适配器设置为recyclerview,它也会自动重新加载。
我检查了谷歌文档提供的样本,它工作正常。但我可以看到我的情况唯一的区别是 Firestore。
implementation 'com.google.firebase:firebase-firestore-ktx:22.1.2'
implementation 'com.google.firebase:firebase-database:19.7.0'
implementation 'com.google.firebase:firebase-storage-ktx:19.2.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "androidx.navigation:navigation-fragment:$2.4.0-alpha01"
implementation "androidx.navigation:navigation-ui:$2.4.0-alpha01"
implementation "androidx.navigation:navigation-fragment-ktx:$2.4.0-alpha01"
implementation "androidx.navigation:navigation-ui-ktx:$2.4.0-alpha01"
我也尝试了稳定版的导航。但同样的行为。
基本片段代码
abstract class BaseFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanseState: Bundle?
): View? {
val view = getFragmentView(inflater, parent, savedInstanseState)
view.findViewById<Toolbar>(R.id.toolbar)?.let {
it.title = getTitle()
it.setNavigationOnClickListener { (activity as HomeActivity).openDrawer() }
}
return view
}
abstract fun getFragmentView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanceState: Bundle?
): View
abstract fun getTitle():String
}
下面列出片段代码
class ProductsFragment : BaseFragment() {
private val productsViewModel: ProductsViewModel by activityViewModels()
private val categoryViewModel: CategoryViewModel by activityViewModels()
override fun getFragmentView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setUpProductsList()
return inflater.inflate(R.layout.fragment_products, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
addFab.setOnClickListener {
findNavController().navigate(R.id.action_nav_products_to_addProductsFragment)
}
txtSearch.addTextChangedListener {
productsViewModel.getProduct(txtSearch.text.toString())
}
}
override fun getTitle(): String {
return resources.getString(R.string.menu_products)
}
private fun setUpProductsList(){
categoryViewModel.getCategories("").observe(this, Observer {categories->
productsViewModel.getProduct("").observe(this, Observer {products->
products.let {
val adapter = ProductListingAdapter( products, categories, requireActivity())
productRV.adapter = adapter
productRV.layoutManager = LinearLayoutManager(requireContext())
}
})
})
}
}
如果您需要更多信息,请发表评论。我会更新答案。