从位于我的 RecyclerView 中的 button.setOnClickListener 开始 activity
Start activity from button.setOnClickListener which lies in my RecyclerView
我想要 activity/class 到 运行 点击 Button
。 Button
在我的 RecyclerView
里面。我首先在 MainActivity
中使用以下代码:
btnComplete.setOnClickListener {
startActivity(Intent(this@MainActivity, DelComplete::class.java))}
此代码在我 MainActivity
的 onCreate
中。如何在 运行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))}
我想要 activity/class 到 运行 点击 Button
。 Button
在我的 RecyclerView
里面。我首先在 MainActivity
中使用以下代码:
btnComplete.setOnClickListener {
startActivity(Intent(this@MainActivity, DelComplete::class.java))}
此代码在我 MainActivity
的 onCreate
中。如何在 运行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))}