【发布时间】:2021-05-12 15:53:12
【问题描述】:
我想在屏幕上显示进度条,直到从 firebase 数据库中获取所有必需的数据。
如何在 fetchMenu() [in MenuFragment.kt] 中使用以下代码
.addOnSuccessListener(OnSuccessListener<Void?> { // Write was successful!
// ...
progressBar.visibility = View.GONE
})
.addOnFailureListener(OnFailureListener { // Write failed
// ...
progressBar.visibility = View.GONE
})
MenuFragment.kt
class MenuFragment : Fragment() {
private var dishList: MutableList<DishModel> = mutableListOf()
private lateinit var myRef: DatabaseReference
lateinit var list: RecyclerView
lateinit var proceedToCartLayout: RelativeLayout
lateinit var addToCartBtn: Button
private var selectedCategory = ""
lateinit var progressLayout: RelativeLayout
lateinit var progressBar: ProgressBar
companion object {
fun newInstance(): Fragment {
return MenuFragment()
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_menu, container, false)
//retrieve id
val bundle = this.arguments
selectedCategory = bundle!!.getString("CATEGORY_ID")!!
list = view.findViewById(R.id.recyclerMenu)
myRef = FirebaseDatabase.getInstance().getReference("Category")
proceedToCartLayout = view.findViewById(R.id.ProceedToCart)
addToCartBtn = view.findViewById(R.id.btn_cart)
progressLayout = view.findViewById(R.id.progressLayout)
progressBar = view.findViewById(R.id.progressBar)
return view
}
override fun onResume() {
if (ConnectionManager().checkConnectivity(activity as Context)) {
fetchMenu()
} else {
val alterDialog = androidx.appcompat.app.AlertDialog.Builder(activity as
Context)
alterDialog.setTitle("No Internet")
alterDialog.setMessage("Connect to internet to continue")
alterDialog.setIcon(R.drawable.nointernet)
alterDialog.setPositiveButton("Open Settings") { _, _ ->
val settingsIntent = Intent(Settings.ACTION_SETTINGS)//open wifi settings
startActivity(settingsIntent)
}
alterDialog.setNegativeButton("Exit") { _, _ ->
ActivityCompat.finishAffinity(activity as Activity)
}
alterDialog.setCancelable(false)
alterDialog.create()
alterDialog.show()
}
super.onResume()
}
private fun fetchMenu() {
progressLayout.visibility = View.VISIBLE
myRef.child(selectedCategory)
.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
progressLayout.visibility = View.GONE
Toast.makeText(context, "$p0", Toast.LENGTH_SHORT).show()
}
override fun onDataChange(p0: DataSnapshot) {
progressLayout.visibility = View.GONE
if (p0.exists()) {
dishList.clear()
for (i in p0.children) {
val plan = i.getValue(DishModel::class.java)
dishList.add(plan!!)
}
val adapter = MenuAdapter(
context!!,
R.layout.menu_list_item,
dishList,
proceedToCartLayout,
addToCartBtn, selectedCategory
)
list.adapter = adapter
}
}
})
}
}
我在使用进度条后得到了结果,但没有得到所需的结果,因为我想显示进度条,直到 RecyclerView 的所有行都被从 firebase 数据库获取的数据填充并且所有视图都正确放置.
我在使用进度条时得到了这个
【问题讨论】:
-
请编辑您的问题并将代码添加为文本,不添加为图像。
标签: android firebase firebase-realtime-database