📌  相关文章
📜  单击与 Firebase 链接的 RecyclerView 中的记录时如何打开另一个活动 (1)

📅  最后修改于: 2023-12-03 15:07:20.623000             🧑  作者: Mango

在 RecyclerView 中单击记录以打开另一个活动

如果您正在使用 Firebase 数据库并希望在 RecyclerView 中显示记录并允许用户单击其中一个以打开另一个活动,则可以遵循以下步骤。

步骤1:在 Project-level build.gradle 中添加 Firebase
buildscript {
    dependencies {
        // add the Firebase Core SDK and Firebase UI SDK
        classpath 'com.google.firebase:firebase-core:19.0.0'
        classpath 'com.firebaseui:firebase-ui-database:6.2.0'
    }
}
步骤2:在 app-level build.gradle 中添加 Firebase 和 RecyclerView
dependencies {
    // add Firebase and RecyclerView libraries
    implementation 'com.google.firebase:firebase-database:19.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
}
步骤3:创建 RecyclerView 和 ViewHolder

使用 RecyclerView 和 ViewHolder 显示 Firebase 数据库中的记录。以下是一个示例 ViewHolder。

class RecordViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    // define views in the layout
    val nameTextView: TextView = itemView.findViewById(R.id.nameTextView)
    val descriptionTextView: TextView = itemView.findViewById(R.id.descriptionTextView)
    val imageView: ImageView = itemView.findViewById(R.id.imageView)
    // define bind function to bind data to the views
    fun bind(record: Record) {
        nameTextView.text = record.name
        descriptionTextView.text = record.description
        Picasso.get().load(record.image).into(imageView)
    }
}
步骤4:创建 FirebaseRecyclerAdapter

使用 FirebaseRecyclerAdapter 来连接 RecyclerView 和 Firebase 数据库。以下是一个示例 FirebaseRecyclerAdapter。

class RecordAdapter(database: DatabaseReference) : FirebaseRecyclerAdapter<Record, RecordViewHolder>(
    FirebaseRecyclerOptions.Builder<Record>()
        .setQuery(database, Record::class.java)
        .build()
) {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecordViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.record_item, parent, false)
        return RecordViewHolder(view)
    }

    override fun onBindViewHolder(holder: RecordViewHolder, position: Int, record: Record) {
        holder.bind(record)
        // handle click event
        holder.itemView.setOnClickListener {
            val context = holder.itemView.context
            val intent = Intent(context, AnotherActivity::class.java)
            intent.putExtra("record_id", getRef(position).key)
            context.startActivity(intent)
        }
    }
}

注意,我们在 onBindViewHolder 函数中添加了一个单击事件处理程序,以处理单击 RecyclerView 中的记录,并打开另一个活动。您可以将 "record_id" 替换为您需要的键。

步骤5:设置 RecyclerView 和 Adapter

将您的 RecyclerView 和 Adapter 连接起来。

class MainActivity : AppCompatActivity() {
    private lateinit var database: DatabaseReference
    private lateinit var adapter: RecordAdapter
    private lateinit var recyclerView: RecyclerView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // get database reference
        database = FirebaseDatabase.getInstance().getReference("records")

        // create adapter
        adapter = RecordAdapter(database)

        // get RecyclerView reference and set adapter
        recyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = adapter
    }

    override fun onStart() {
        super.onStart()
        adapter.startListening()
    }

    override fun onStop() {
        super.onStop()
        adapter.stopListening()
    }
}

在 MainActivity 中,我们创建了一个 RecordAdapter,并将其设置为 RecyclerView 的适配器。并且我们在 onStart 和 onStop 函数中启动和停止监听器。

现在,当用户单击 RecyclerView 中的记录时,将打开 AnotherActivity,并传递所选记录的键。

这是一个完整的示例,您可以根据需要进行更改和定制。

注意: Firebase UI SDK 只支持特定版本的 Firebase SDK。请确保您在 app-level build.gradle 中使用与 Firebase UI SDK 版本匹配的 Firebase SDK 版本。