Es ist mein dritter Tag, der sich jetzt mit der Handhabung meiner View-Klicks beschäftigt. Ich benutzte ursprünglich ListView
, dann wechselte ich zu RecyclerView
. Ich habe auf meinem row_layout
android:onclick
Elemente zu jedem Steuerelement hinzugefügt, und ich bin Umgang mit ihnen in meinem MainActivity
wie folgt aus:RecyclerView - Holen Sie sich Position in Activity statt RecyclerViewAdapter
public void MyMethod(View view) {}
In meiner alten ListView
Implementierung habe ich setTag(position)
getan in der Lage sein es in MyMethod
zu erhalten, indem dies zu tun Darin:
Integer.parseInt(view.getTag().toString())
Das funktionierte gut ohne Probleme. Aber jetzt habe ich es mit RecyclerView
und gezwungen, die ViewHolder
zu verwenden, die keine setTag
Methode bietet. Nach der Suche nach 2 Stunden, habe ich festgestellt, dass die Menschen setTag
wie folgt verwenden:
holder.itemView.setTag(position)
Das war akzeptabel. Obwohl, wenn ich versuche, den Wert aus der MyMethod
Funktion zu erhalten mit der Zeile:
Integer.parseInt(view.getTag().toString())
die Anwendung abstürzt. Ich habe gelesen, mehrere Implementierung von onclick Handhabung in dem Adapter, der funktioniert, aber ich muss die MainActivity
verwenden, weil ich etwas verwende, das für diese Aktivität einzigartig ist.
TL; DR Ich möchte auf einfache Weise die Position der angeklickten Zeile an meine MainActivity
senden.
Edit: Ich entschuldige mich für die Verwirrung, da mein Thema nicht sehr gründlich war. Ich habe eine RecyclerView
und einen Adapter. Der Adapter ist mit meinem row_layout
verbunden. Diese row_layout
xml hat eine Wurzel LinearLayout
. Darin befindet sich eine TextView
, eine weitere LinearLayout
(die zwei TextViews
hat) und eine Button
(der Einfachheit halber). Ich will nicht leiden für den Umgang mit den Klicks auf RecylerView
wie ich mit der ListView
getan habe. Also, ich habe beschlossen, ein android:onclick
für jedes Steuerelement hinzufügen, dann verknüpfen TextView
und LinearLayout
zu einer einzigen Methode und verknüpfen Sie die Button
(und zukünftige Button
s) zu ihren einzigartigen Methoden. Was ich vermisse, ist, dass ich in der Lage sein möchte, die Position auf jeder der Empfangsmethoden auf meiner MainActivity
zu erzählen. Wenn ich alles verbinden muss, was vom Adapter kommt und in den MainActivity
zu einem einzigen onclick-Handler geht, so sei es. Wie aber würde ich sagen, welches Steuerelement den Klick ausgelöst hat?
Edit 2: Die gewünschte Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:onClick="MyMethod"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/letter"
android:onClick="MyMethod"
android:layout_width="60dp"
android:layout_height="fill_parent"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:onClick="MyMethod"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/firstname"
android:onClick="MyMethod"
android:layout_width="fill_parent"
android:layout_height="17dp" />
<TextView
android:id="@+id/longname"
android:onClick="MyMethod"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<Button
android:text="Test"
android:onClick="OtherMethod"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/process"/>
</LinearLayout>
Innerhalb Halter können Sie getAdapterPosition tun, um die bestimmte Position des Artikels zu erhalten. Hier müssen Sie 'setTag()' und 'getTag()' nicht machen. –
Ja, ich kann das im Adapter verwenden. Obwohl, was ich will, ist in der Lage, die Position in der MainActivity nicht innerhalb des Adapters selbst zu bekommen. –
Haben Sie hier einige Antworten gelesen? http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-is-dif –