android 以编程方式从Kotlin添加xml

8mmmxcuj  于 2023-03-06  发布在  Android
关注(0)|答案(1)|浏览(231)

我正在尝试编写一个食品订购应用程序的管理部分,在那里他们可以看到存储在Firestore数据库中的订单。为了做到这一点,我有一些代码来监听数据库并获取所有文档:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Window
import android.widget.Toast
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase

class AdminOrders : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
        supportActionBar?.hide()
        setContentView(R.layout.activity_admin_orders)

        val db = Firebase.firestore
        db.collection("Orders").addSnapshotListener { snapshot, e ->
            if (e == null && snapshot != null) {
                db.collection("Orders")
                    .get()
                    .addOnSuccessListener { result ->
                        for (document in result) {
                            
                            Toast.makeText(this@AdminOrders, document.data["food"].toString(), Toast.LENGTH_SHORT).show()

                        }
                    }
            }
        }
    }
}

问题在于,为了制作UI,我需要一个XML按钮,当点击该按钮时,显示数据库中每个返回文档的文档字段。
我是如何在android studio中使用Kotlin实现这个结果的?

xwbd5t1u

xwbd5t1u1#

您可以创建一个RecyclerView来显示列表中的订单。这是Kotlin中的一个sample app source
item layout将有一个按钮。然后设置Click Listener以显示/隐藏其他元素。
您的适配器可能如下所示:

class OrdersAdapter(private val dataSet: Array<Orders>) :
        RecyclerView.Adapter<OrdersAdapter.ViewHolder>() {

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView

        init {
            // Define click listener for the ViewHolder's View
            textView = view.findViewById(R.id.textView)
            button = view.findViewById(R.id.button)
        }
    }

    // Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        // Create a new view, which defines the UI of the list item
        val view = LayoutInflater.from(viewGroup.context)
                .inflate(R.layout.order_item, viewGroup, false)

        return ViewHolder(view)
    }

    // Replace the contents of a view (invoked by the layout manager)
    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {

        // Get element from your dataset at this position and replace the
        // contents of the view with that element
        viewHolder.textView.text = dataSet[position].title
        // Set the button handler OnClickListener
        viewHolder.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  // Show other elements
              }
          });

    }

    // Return the size of your dataset (invoked by the layout manager)
    override fun getItemCount() = dataSet.size
}

相关问题