Holen Sie sich das angeklickte Element und seine Position in RecyclerView

104

Ich ersetzt meine ListViewmit RecyclerView, die Liste zeigt ok, aber ich würde gerne wissen , wie geklickten Artikel zu erhalten und seine Position, ähnlich dem Verfahren OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)wir in verwenden ListView.

Danke für Ideen!

Xcihnegn
quelle
1
Überprüfen Sie dieses Tutorial wiki.workassis.com/android-recyclerview-example
Bikesh M
Für mich der einfachste Weg: CustomSelectionCallback
ATES

Antworten:

177

Basierend auf dem Link: Warum hat RecyclerView nicht onItemClickListener ()? und wie unterscheidet sich RecyclerView von Listview? und auch @ Duncans allgemeine Idee, ich gebe hier meine Lösung:

  • Definieren Sie eine Schnittstelle RecyclerViewClickListenerzum Weiterleiten der Nachricht vom Adapter an Activity/ Fragment:

    public interface RecyclerViewClickListener {
        public void recyclerViewListClicked(View v, int position);
    }
  • In Activity/ Fragmentimplementieren Sie die Schnittstelle und übergeben Sie den Listener an den Adapter:

    @Override
    public void recyclerViewListClicked(View v, int position){... ...}
    
    //set up adapter and pass clicked listener this
    myAdapter = new MyRecyclerViewAdapter(context, this);
  • In Adapterund ViewHolder:

    public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ItemViewHolder> {
       ... ... 
       private Context context;
       private static RecyclerViewClickListener itemListener;
    
    
       public MyRecyclerViewAdapter(Context context, RecyclerViewClickListener itemListener) {
           this.context = context;
           this.itemListener = itemListener;
           ... ...
       }
    
    
       //ViewHolder class implement OnClickListener, 
       //set clicklistener to itemView and, 
       //send message back to Activity/Fragment 
       public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
           ... ...
           public ItemViewHolder(View convertView) {
               super(convertView);
               ... ...
               convertView.setOnClickListener(this);
           }
    
           @Override
           public void onClick(View v) {
               itemListener.recyclerViewListClicked(v, this.getPosition());     
    
           }
       }
    }

Nach dem Testen funktioniert es gut.


[ UPDATE ]

Da API 22 RecyclerView.ViewHoler.getPosition()veraltet ist, also stattdessen mit getLayoutPosition().

Xcihnegn
quelle
21
Verwenden Sie die Methode getLayoutPosition (), da getPosition () jetzt nicht mehr verfügbar ist.
Ankur Chaudhary
2
danke für diesen Code :) nur ein Tipp: Verweisen Sie private static RecyclerViewClickListener itemListener;im Konstruktor statisch auf die Statik.
David Artmann
1
@khurramengr Am Ende habe ich jedem Element der Methode einen Listener hinzugefügt onBindViewHolder. Außerdem war mein Listenelement nicht alle anklickbar (nur ein Teil des Elements).
Ferran Negre
1
Sollten Sie hier keine WeakReference verwenden : new MyRecyclerViewAdapter(context, this)? Dies könnte zu Speicherlecks führen
RamwiseMatt
2
public void recyclerViewListClicked(View v, int position);Der Modifikator publicist für Schnittstellenmethoden redundant
Joel Raju
35
public class MyRvAdapter extends RecyclerView.Adapter<MyRvAdapter.MyViewHolder>{
    public Context context;
    public ArrayList<RvDataItem> dataItems;

    ...
    constructor
    overrides
    ...

    class MyViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public Context context;

        public MyViewHolder(View itemView, Context context) {
            super(itemView);

            this.context = context;

            this.textView = (TextView)itemView.findViewById(R.id.textView);

            // on item click
            itemView.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    // get position
                    int pos = getAdapterPosition();

                    // check if item still exists
                    if(pos != RecyclerView.NO_POSITION){
                        RvDataItem clickedDataItem = dataItems.get(pos);
                        Toast.makeText(v.getContext(), "You clicked " + clickedDataItem.getName(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
}
Uday Hiwarale
quelle
4
Danke dir. getAdapterPosition () ist das, was ich brauchte.
Ayaz Alifov
1
Danke für den Code Mann !! Hat meinen Tag gerettet. Ich war mir nicht sicher, wo ich getAdapterPosition () platzieren sollte und nach deinem Code habe ich es zum Laufen gebracht ... Schön und einfach :)
Vinay Vissh
Vielen Dank, Alter, dein Code war genau das, was ich brauche! Glücklicher Mann
Naveen Nirban Yadav
13

Hier ist ein Beispiel zum Festlegen eines Klick-Listeners.

Adapter extends  RecyclerView.Adapter<MessageAdapter.MessageViewHolder> {  ...  }

 public static class MessageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView     tv_msg;
        public TextView     tv_date;
        public TextView     tv_sendTime;
        public ImageView    sharedFile;
        public ProgressBar sendingProgressBar;

        public MessageViewHolder(View v) {
            super(v);
            tv_msg =  (TextView) v.findViewById(R.id.tv_msg);
            tv_date = (TextView)  v.findViewById(R.id.tv_date);
            tv_sendTime = (TextView)  v.findViewById(R.id.tv_sendTime);
            sendingProgressBar = (ProgressBar) v.findViewById(R.id.sendingProgressBar);
            sharedFile = (ImageView) v.findViewById(R.id.sharedFile);

            sharedFile.setOnClickListener(this);

        }

        @Override
        public void onClick(View view) {
        int position  =   getAdapterPosition();


            switch (view.getId()){
                case R.id.sharedFile:


                    Log.w("", "Selected"+position);


                    break;
            }
        }

    }
Gilberto Ibarra
quelle
Was ist getAdapterPostion (); Hier?
TheDevMan
1
Die Position der Ansicht wurde angeklickt. ist keine benutzerdefinierte Methode.
Gilberto Ibarra
Dies scheint der sauberste Weg zu sein, zumal Sie fast immer daran interessiert sind, Daten über die Position abzurufen, und möglicherweise keinen Zugriff auf das RecyclerView-Objekt haben.
FrostRocket
Vielen Dank fürint position = getAdapterPosition();
Shylendra Madda
Bitte beachten Sie, dass der Aufruf von getAdapterPosition, während die Liste aktualisiert wird, z. B. aufgrund des Aufrufs von notififyXYZ, -1
David
11

Fügen Sie diesen Code dort ein, wo Sie die Recycler-Ansicht in Aktivität definieren.

    rv_list.addOnItemTouchListener(
            new RecyclerItemClickListener(activity, new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View v, int position) {

                    Toast.makeText(activity, "" + position, Toast.LENGTH_SHORT).show();
                }
            })
    );

Dann machen Sie eine separate Klasse und geben Sie diesen Code ein:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {

    private OnItemClickListener mListener;
    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }
    GestureDetector mGestureDetector;
    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }
    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}
Bhumika Rijiya
quelle
7

Erstellen Sie eine Java-Datei mit dem folgenden Code

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;

public interface OnItemClickListener {
    public void onItemClick(View view, int position);
}

GestureDetector mGestureDetector;

public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });
}

@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildLayoutPosition(childView));
        return true;
    }
    return false;
}

@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}

Verwenden Sie einfach den Listener für Ihr RecyclerView-Objekt.

recyclerView.addOnItemTouchListener(  
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
  @Override public void onItemClick(View view, int position) {
    // TODO Handle item click
  }
}));
MazRoid
quelle
RecyclerItemClickListenerist keine Standard-Android-Klasse, Sie sollten die Bibliothek, die Sie verwenden, oder die Klasse selbst bereitstellen.
Greg
@ Greg Danke !! Ich habe vergessen zu posten!
MazRoid
5

Wenn Sie das Click-Ereignis von recycle-View aus Aktivität / Fragment anstelle des Adapters wünschen, können Sie auch die folgende Abkürzung verwenden.

recyclerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                final TextView txtStatusChange = (TextView)v.findViewById(R.id.txt_key_status);
                txtStatusChange.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.e(TAG, "hello text " + txtStatusChange.getText().toString() + " TAG " + txtStatusChange.getTag().toString());
                        Util.showToast(CampaignLiveActivity.this,"hello");
                    }
                });
                return false;
            }
        });

Sie können auch andere lange Wege wie die Verwendung der Schnittstelle verwenden

Amandeep Rohila
quelle
,, hi there, aber was ist, wenn wir auch die Position des Artikels anklicken müssen? ?
Mfaisalhyder
Sie können einfach die Position des Elements in TAG über den Adapter festlegen und dann das Tag wie oben erwähnt abrufen. TxtStatusChange.getTag (). ToString ()
Amandeep Rohila
@AmandeepRohila Damit der Code funktioniert, muss ich zuerst zum Ende einer horizontalen Recycling-Ansicht scrollen. Nur dann funktioniert der Toast. Gibt es nicht eine Möglichkeit, es zum Laufen zu bringen, ohne zuerst vor und zurück scrollen zu müssen?
iOSAndroidWindowsMobileAppsDev
4
recyclerViewObject.addOnItemTouchListener(
    new RecyclerItemClickListener(
        getContext(),
        recyclerViewObject,
        new RecyclerItemClickListener.OnItemClickListener() {
            @Override public void onItemClick(View view, int position) {
                // view is the clicked view (the one you wanted
                // position is its position in the adapter
            }
            @Override public void onLongItemClick(View view, int position) {
            }
        }
    )
);
Cosmin Badulescu
quelle
Was ist das für eine Zauberei? Funktioniert perfekt.
Bolling
2

Verwenden Sie den folgenden Code: -

public class SergejAdapter extends RecyclerView.Adapter<SergejAdapter.MyViewHolder>{

...

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{


    @Override
    public void onClick(View v) {
        // here you use position
        int position = getAdapterPosition();
        ...

    }
}
}
Akanksha Rathore
quelle
1

RecyclerView bietet keine solche Methode.

Um Klickereignisse in RecyclerView zu verwalten, habe ich beim Binden des ViewHolder onClickListener in meinem Adapter implementiert: In meinem ViewHolder behalte ich einen Verweis auf die Stammansicht (wie Sie es mit Ihren ImageViews, TextViews usw. tun können) und beim Binden the viewHolder Ich habe ein Tag mit Informationen festgelegt, die ich für den Umgang mit Klicks (z. B. Position) und einem Klicklistener benötige

Zoubiock
quelle
3
Ja, wir können den Klick-Listener in ViewHolder einstellen, aber ich muss die angeklickte Elementansicht und Position für den weiteren Prozess an mein Fragment zurückgeben
Xcihnegn
1

Hier ist der einfachste und einfachste Weg, um die Position des angeklickten Elements zu ermitteln:

Ich habe auch das gleiche Problem konfrontiert.

Ich wollte die Position des angeklickten / ausgewählten Elements in RecyclerView () ermitteln und einige bestimmte Vorgänge für dieses bestimmte Element ausführen.

Die Methode getAdapterPosition () funktioniert wie ein Zauber für solche Dinge. Ich fand diese Methode nach einem Tag langer Forschung und nachdem ich zahlreiche andere Methoden ausprobiert hatte.

int position = getAdapterPosition();
Toast.makeText(this, "Position is: "+position, Toast.LENGTH_SHORT).show();

Sie müssen keine zusätzliche Methode verwenden. Erstellen Sie einfach eine globale Variable mit dem Namen 'position' und initialisieren Sie sie mit getAdapterPosition () in einer der Hauptmethoden des Adapters (Klasse oder ähnlich).

Hier ist eine kurze Dokumentation von diesem Link .

getAdapterPosition in Version 22.1.0 hinzugefügt int getAdapterPosition () Gibt die Adapterposition des durch diesen ViewHolder dargestellten Elements zurück. Beachten Sie, dass dies möglicherweise anders ist als getLayoutPosition (), wenn Adapteraktualisierungen ausstehen, aber noch kein neuer Layoutdurchlauf erfolgt ist. RecyclerView verarbeitet keine Adapteraktualisierungen bis zur nächsten Layoutüberquerung. Dies kann zu vorübergehenden Inkonsistenzen zwischen dem, was der Benutzer auf dem Bildschirm sieht, und dem Inhalt des Adapters führen. Diese Inkonsistenz ist nicht wichtig, da sie weniger als 16 ms beträgt. Sie kann jedoch ein Problem darstellen, wenn Sie die ViewHolder-Position verwenden möchten, um auf den Adapter zuzugreifen. Manchmal müssen Sie möglicherweise die genaue Adapterposition ermitteln, um einige Aktionen als Reaktion auf Benutzerereignisse ausführen zu können. In diesem Fall sollten Sie diese Methode verwenden, mit der die Adapterposition des ViewHolder berechnet wird.

Freue mich zu helfen. Fühlen Sie sich frei, Zweifel zu stellen.

Himanshu Nimje
quelle
Was ist der einfachste und einfachste Weg, um den Wert eines angeklickten Elements von RecyclerView zu ermitteln?
परूळेकर परूळेकर
1

Meine einfache Lösung

Make a position holder:

    public class PositionHolder {

    private int position;

    public PositionHolder(int position) {
        this.position = position;
    }

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }
}

Positionieren oder platzieren Sie einfach die Daten, die Sie für die Aktivität benötigen.

Adapterkonstruktor:

public ItemsAdapter(Context context, List<Item> items, PositionHolder positionHolder){
        this.context = context;
        this.items = items;
        this.positionHolder = positionHolder;
}

In Aktivität:

 @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        selectedPosition = 0;

        positionHolder = new PositionHolder(selectedPosition);
        initView();
    }

Im Adapter onClickLictener im Element
in onBindViewHolder

holder.holderButton.setOnClickListener(v -> {
            positionHolder.setPosition(position);
            notifyDataSetChanged();
        });

Wenn Sie jetzt die Position in RecyclerView ändern, wird sie im Halter gehalten (oder sollte als Listener bezeichnet werden).

Ich hoffe es wird nützlich sein

Mein erster Beitrag; P.

Mateusz Niedbal
quelle
0
//Create below methods into the Activity which contains RecyclerView.


private void createRecyclerView() {

final RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    MyAdapter myAdapter=new MyAdapter(dataAray,MianActivity.this);
    recyclerView.setAdapter(myAdapter);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    setRecyclerViewClickListner(recyclerView);
}

private void setRecyclerViewClickListner(RecyclerView recyclerView){

    final GestureDetector gestureDetector = new GestureDetector(MainActivity.this,new GestureDetector.SimpleOnGestureListener() {
        @Override public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });


    recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
            View child =recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY());
            if(child!=null && gestureDetector.onTouchEvent(motionEvent)){
               int position=recyclerView.getChildLayoutPosition(child);
                String name=itemArray.get(position).name;

            return true;
        }

        @Override
        public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean b) {

        }
    });
}
Kamran
quelle
3
Bitte fügen Sie eine Erklärung hinzu, nur das Ausgeben von Code ohne Einführung und eine Erklärung, wie dies das Problem behebt, ist nicht sehr hilfreich.
Mark Rotteveel
0

Versuchen Sie es auf diese Weise

Adapterklasse:

 public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {

public interface OnItemClickListener {
    void onItemClick(ContentItem item);
}

private final List<ContentItem> items;
private final OnItemClickListener listener;

public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
    this.items = items;
    this.listener = listener;
}

@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false);
    return new ViewHolder(v);
}

@Override public void onBindViewHolder(ViewHolder holder, int position) {
    holder.bind(items.get(position), listener);
}

@Override public int getItemCount() {
    return items.size();
}

static class ViewHolder extends RecyclerView.ViewHolder {

    private TextView name;
    private ImageView image;

    public ViewHolder(View itemView) {
        super(itemView);
        name = (TextView) itemView.findViewById(R.id.name);
        image = (ImageView) itemView.findViewById(R.id.image);
    }

    public void bind(final ContentItem item, final OnItemClickListener listener) {
        name.setText(item.name);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                listener.onItemClick(item);
            }
        });
    }
}

}}

In Ihrer Aktivität oder Ihrem Fragment:

ContentAdapter adapter = new ContentAdapter(itemList, this);

Hinweis: Implementieren Sie den OnItemClickListener basierend auf dem von Ihnen in Aktivitäts- oder Fragment- und Überschreibungsmethoden angegebenen Kontext.

RajeshVijayakumar
quelle
Schöne Lösung oben. Können Sie oben hinzufügen, um zu zeigen, wie die onItemClick-Methode in der Aktivität aussehen soll? Ich versuche, die Position des Gegenstands an eine Absicht weiterzugeben (um die nächste Aktivität zu öffnen) und erhalte immer wieder die falsche Position.
AJW
0

Jedes Mal, wenn ich einen anderen Ansatz verwende. Personen scheinen eine Ansicht in einer Ansicht zu speichern oder zu positionieren, anstatt einen Verweis auf ein Objekt zu speichern, das von ViewHolder angezeigt wird.

Ich verwende stattdessen diesen Ansatz und speichere ihn einfach in ViewHolder, wenn onBindViewHolder () aufgerufen wird, und setze den Verweis in onViewRecycled () auf null.

Jedes Mal, wenn ViewHolder unsichtbar wird, wird es recycelt. Dies wirkt sich also nicht auf den großen Speicherverbrauch aus.

@Override
public void onBindViewHolder(final ItemViewHolder holder, int position) {
    ...
    holder.displayedItem = adapterItemsList.get(i);
    ...
}

@Override
public void onViewRecycled(ItemViewHolder holder) {
    ...
    holder.displayedItem = null;
    ...
}

class ItemViewHolder extends RecyclerView.ViewHolder {
    ...
    MySuperItemObject displayedItem = null;
    ...
}
Kirill Volkov
quelle
0

Die kurze Erweiterung für die Kotlin-
Methode gibt die absolute Position aller Elemente zurück (nicht die Position nur der sichtbaren Elemente).

fun RecyclerView.getChildPositionAt(x: Float, y: Float): Int {
    return getChildAdapterPosition(findChildViewUnder(x, y))
}

Und Nutzung

val position = recyclerView.getChildPositionAt(event.x, event.y)
Pavel Shorokhov
quelle
0

Verwenden Sie getLayoutPosition () in Ihrer Java-Methode für benutzerdefinierte Schnittstellen. Dadurch wird die ausgewählte Position eines Elements zurückgegeben. Überprüfen Sie alle Details auf

https://becody.com/get-clicked-item-and-its-position-in-recyclerview/

Rana Aamer
quelle
1
Willkommen bei Stack Overflow! Während Links eine großartige Möglichkeit sind, Wissen zu teilen, werden sie die Frage nicht wirklich beantworten, wenn sie in Zukunft kaputt gehen. Fügen Sie Ihrer Antwort den wesentlichen Inhalt des Links hinzu, der die Frage beantwortet. Falls der Inhalt zu komplex oder zu groß ist, um hierher zu passen, beschreiben Sie die allgemeine Idee der vorgeschlagenen Lösung. Denken Sie daran, immer einen Linkverweis auf die Website der ursprünglichen Lösung zu führen. Siehe: Wie schreibe ich eine gute Antwort?
sɐunıɔ ןɐ qɐp
0

Im Designer können Sie die onClickEigenschaft des listItem auf eine Methode festlegen, die mit einem einzelnen Parameter definiert wurde. Ich habe eine Beispielmethode unten definiert. Die Methode getAdapterPosition gibt Ihnen den Index des ausgewählten listItem.

public void exampleOnClickMethod(View view){
    myRecyclerView.getChildViewHolder(view).getAdapterPosition());
}

Informationen zum Einrichten einer RecyclerView finden Sie in der Dokumentation hier: https://developer.android.com/guide/topics/ui/layout/recyclerview

Spencer Milner
quelle
0
//simply check if the adapter position you get not less than zero

holder.btnDelItem.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(holder.getAdapterPosition()>=0){
            list.remove(holder.getAdapterPosition());
            notifyDataSetChanged();
        }
    }
});
Yasir Tariq
quelle
3
Wenn Sie eine alte Frage beantworten, ist Ihre Antwort für andere StackOverflow-Benutzer viel nützlicher, wenn Sie einen Kontext angeben, um zu erklären, wie Ihre Antwort hilft, insbesondere für eine Frage, für die bereits eine Antwort akzeptiert wurde. Siehe auch : Wie kann ich eine gute Antwort schreiben .
David Buck
0

Nach vielen Versuchen und Irrtümern stellte ich fest, dass es eine sehr einfache Möglichkeit gibt, dies zu tun, indem ich eine Schnittstelle in der Adapterklasse erstelle und diese in Fragmente implementiere. Jetzt kommt die Wendung Fragment Jetzt können Sie die Daten von dieser Funktion an viemodel und von dort überall senden.

Ich weiß nicht, ob diese Methode eine gute Codierungsmethode ist, aber bitte lassen Sie es mich im Kommentar wissen. Wenn jemand dies sehen möchte, lassen Sie es mich im Kommentarbereich wissen. Ich öffne regelmäßig den Stackover-Flow.


quelle
0
recyclerView.addOnItemTouchListener(object : AdapterView.OnItemClickListener,
                RecyclerView.OnItemTouchListener {
                override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                    TODO("Not yet implemented")
                }

                override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {
                    TODO("Not yet implemented")
                }

                override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
                    TODO("Not yet implemented")
                }

                override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
                    TODO("Not yet implemented")
                }

            })

Wenn Sie Kotlin verwenden

Sandeep Pareek
quelle
Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
28огдан Опир
-4

Setzen Sie in onViewHolder onClickListiner auf eine beliebige Ansicht und klicken Sie in der Seite auf diesen Code:

Toast.makeText (Drawer_bar.this, "position" + position, Toast.LENGTH_SHORT) .show ();

Ersetzen Sie Drawer_Bardurch Ihren Aktivitätsnamen.

Thasreef Mogral
quelle