从位于我的 RecyclerView 中的 button.setOnClickListener 开始 activity

Start activity from button.setOnClickListener which lies in my RecyclerView

我想要 activity/class 到 运行 点击 ButtonButton 在我的 RecyclerView 里面。我首先在 MainActivity 中使用以下代码:

btnComplete.setOnClickListener {
            startActivity(Intent(this@MainActivity, DelComplete::class.java))}

此代码在我 MainActivityonCreate 中。如何在 运行ning 代码中发现错误:

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

我的第一个想法是它无法到达 Button 因为它在 RecyclerView 中。所以我试着把代码放在我的 RecyclerView 中。但是我读到把它放在 RecyclerView 中不是一个好主意而且我不知道如何处理 Context 因为它一直在抛出错误。

RecyclerView:

     txtbutton1.setOnClickListener {
                    confirmdel()
                    modal.tvdone = "Delivered"
                    Log.e("Clicked", "Successful delivery")
                    //this is where I add code to export data through api
                    modal.state = DataState.Success
                    Status = 1
                    notifyDataSetChanged()}
    private fun confirmdel() {
        startActivity(Intent(this, DelComplete::class.java))}

它可能就像填写 Context 一样简单,但我不确定 Context 必须是什么来检验该理论。

Recyclerview- table_list_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"

    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/txtWOrder"
        android:layout_width="160dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_content_cell_bg"
        android:text="@string/worder"
        android:textSize="18sp"
        tools:ignore="TextContrastCheck" />

    <TextView
        android:id="@+id/txtDElNote"
        android:layout_width="190dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_content_cell_bg"
        android:text="@string/delnote"
        android:textSize="18sp"
        tools:ignore="TextContrastCheck" />

    <TextView
        android:id="@+id/txtCompany"
        android:layout_width="190dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_content_cell_bg"
        android:text="@string/company"
        android:textSize="18sp"
        tools:ignore="TextContrastCheck" />

    <Button
        android:id="@+id/btnComplete"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_header_cell_bg"
        android:drawableTint="#70D5C8"
        android:text="@string/button1"
        android:textSize="18sp" />

    <Button
        android:id="@+id/btnException"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_content_cell_bg"
        android:text="@string/button2"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/txttvdone"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:background="@drawable/table_content_cell_bg"
        android:foregroundGravity="center_horizontal"
        android:text=""
        android:textAlignment="center"
        android:textSize="24sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/txtWeight"
        android:layout_width="190dp"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@drawable/table_content_cell_bg"
        android:text="@string/weight"
        android:textSize="18sp"
        tools:ignore="TextContrastCheck" />
</LinearLayout>

我的 RecyclerView 中有 Button 的原因是在每个条目上 driver 应该能够对交付提供反馈。每个条目都是不同的顺序。我这样做是不是走错了路?

我的按钮执行以下操作:

   txtbutton1.setOnClickListener {

                    confirmdel()
                    modal.tvdone = "Delivered"
                    Log.e("Clicked", "Successful delivery")
                    //this is where I add code to export data through api
                    modal.state = DataState.Success
                    Status = 1
                    notifyDataSetChanged()
                }

这样做没有问题。但是现在我想添加一个 AlertDialog 并用 setOnClickListener 更新我的 DB 中的数据。这可以从我的适配器中实现吗?

您不应将按钮放在 RecyclerView 中,除非您将按钮称为项目本身。 RecyclerViews 用于呈现与数据源中一样多的项目,而不是对它们进行硬编码,因此我认为您想处理对单个项目的点击并使用该项目的数据导航到另一个 Activity .

您可以按照 these 个步骤进行操作。这是 Google 制作的代码实验室,解释了如何处理项目点击。

另外,你也应该做those,才能更好的understanding.RecyclerViews

您可以像这样使用上下文:

class Adapter(private val context: Context, private val myList: List<String>) :
RecyclerView.Adapter<Adapter.ViewHolder>()

并像这样在需要的地方传递上下文

    private fun confirmdel() {
    startActivity(Intent(context, DelComplete::class.java))}