RecyclerView - erhalten Sie Position im inneren Tätigkeit eher als RecyclerViewAdapter

Es ist mein Dritter Tag jetzt im Zusammenhang mit der Handhabung meiner Ansicht klickt. Ich war ursprünglich mit ListView, dann wechselte ich zu RecyclerView. Ich habe android:onclick Elemente zu jeder Kontrolle über mein row_layout und ich bin den Umgang mit Ihnen in meiner MainActivity wie diese:

public void MyMethod(View view) {}

In meiner alten ListView Umsetzung, die ich getan habe setTag(position) in der Lage sein, um es in MyMethod dadurch ist es innen:

Integer.parseInt(view.getTag().toString())

Dies funktioniert gut, ohne Probleme. Aber jetzt bin ich den Umgang mit RecyclerView und gezwungen sind, verwenden Sie die ViewHolder, die nicht bieten eine setTag Methode. Nach der Suche für 2 Stunden, ich habe gefunden, dass Menschen setTag wie diese:

holder.itemView.setTag(position)

War dies akzeptabel. Obwohl, wenn ich versuche, den Wert aus der MyMethod - Funktion mit der Zeile:

Integer.parseInt(view.getTag().toString())

Stürzt die Anwendung ab. Ich habe gelesen, mehrere Umsetzung der onclick-handling in den adapter, die funktioniert, aber muss ich das MainActivity denn ich bin mit etwas, das einzigartig ist die Aktivität.

TL;DR ich will zum senden der position der angeklickten Zeile zu meiner MainActivity in einer einfachen Art und Weise.

Edit: ich entschuldige mich für die Verwirrung, da mein Thema war nicht sehr gründlich. Ich habe eine RecyclerView und einen adapter. Der adapter ist mit meinen row_layout. Diese row_layout xml hat eine Wurzel LinearLayout. Im inneren gibt es eine TextView, andere LinearLayout (die hat zwei TextViews) und eine Button (für die Einfachheit). Ich will nicht leiden für den Umgang mit den Klicks auf RecylerView wie ich mit der ListView. Also habe ich beschlossen, fügen Sie ein android:onclick für jedes Steuerelement, dann link TextView und LinearLayout auf eine einzige Methode und Verknüpfung der Button (und Zukunft Buttons), um Ihre einzigartigen Methoden. Was mir fehlt ist, dass ich in der Lage sein möchten zu sagen, die position auf jeder der empfangenden Methoden auf meine MainActivity. Wenn ich muss link alles, was kommt vom adapter und geht in den MainActivity zu einem einzigen onclick-handler, so dass es sein. Obwohl, wie würde ich sagen, die Kontrolle, feuerte die klicken Sie auf?

Edit 2: Die angeforderte 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>
  • Innen-Halter, die Sie tun können getAdapterPosition, um die Besondere position. Hier braucht kein setTag() und getTag().
  • Ja, ich kann verwenden, dass innerhalb der adapter. Obwohl, was ich will, ist in der Lage sein, um die position in der MainActivity nicht in den adapter.
  • Haben Sie Lesen Sie über einige der Antworten hier? stackoverflow.com/questions/24885223/...
  • ja, es war eins der Themen, auf die ich gestoßen bin, während ich war auf der Suche nach einer Lösung für mein problem.
  • bitte fügen Sie den adapter code hier
Schreibe einen Kommentar