Este es mi item_simple_itemview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<TextView
android:id="@+id/simple_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:text="Test"
android:text="This is some temp text" />
<Button
android:id="@+id/btn"
android:layout_width="208dp"
android:layout_height="50dp"
android:layout_marginTop="16dp"
android:minWidth="10dip"
android:minHeight="10dip"
android:onClick="onChangeClick" />
</LinearLayout>
He creado una RecyclerView
con varias instancias de este archivo XML, ya que son "elementos" en la lista.
Mi onChangeClick
es el siguiente:
public void onChangeClick(View view) {
View inflatedView = getLayoutInflater().inflate(R.layout.item_simple_itemview, null);
TextView textView = inflatedView.findViewById(R.id.simple_text);
Toast.makeText(getApplicationContext(), (CharSequence) ("Text: " + textView.getText()),
Toast.LENGTH_SHORT);
}
Me programáticamente añadir instancias de item_simple_itemview
s con el RecyclerView
, y cambiar el texto en simple_text
y btn
. Cuando hago clic en el botón en el botón de un elemento individual, sin embargo, tengo la notificación de pan tostado Text: this is some temp text
.
¿Cómo hago para que el texto se refieren a esa instancia específica del artículo y no el archivo XML propia base?
android:onClick
, Como lo está utilizando, es antigua . La tuya es la segunda vez que he visto hoy, después de no haber visto que se usa en muchos años. En particular, android:onClick
las rutas evento Haga clic para un método que implemente en su Activity
. Eso no es especialmente flexible.
Y, en su caso, si tiene N botones, cada uno de los N botones llamar al mismo método. Mientras se obtiene la View
traspasó a su método como un parámetro, que no es necesariamente tan útil para identificar qué fila en su RecyclerView
es la que se ha hecho clic.
Recomiendo retirar android:onClick
. En cambio, en onBindViewHolder()
, como parte de su trabajo, llamada setOnItemClickListener()
en el Button
. El OnClickListener
(o la expresión lambda) que se utiliza no puede referirse al position
parámetro pasado a onBindViewHolder()
, si haces position
sea final
. De esta manera, el controlador de clic tiene acceso directo position
, y desde allí se puede averiguar qué artículo particular en la lista que position
corresponde a.