Uzyskaj kliknięty element i jego pozycję w RecyclerView

105

Ja zastępując Moje strony ListViewz RecyclerViewlista pokazano OK, ale chciałbym wiedzieć, jak uzyskać klikniętego elementu i jego pozycję, podobnie jak w metodzie OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)używamy w ListView.

Dzięki za pomysły!

Xcihnegn
źródło
1
sprawdź ten samouczek wiki.workassis.com/android-recyclerview-example
Bikesh M
Najprościej jak dla mnie: CustomSelectionCallback
ATES

Odpowiedzi:

177

Na podstawie linku: Dlaczego RecyclerView nie ma onItemClickListener ()? i czym różni się RecyclerView od Listview? , a także ogólny pomysł @ Duncana, podaję tutaj moje rozwiązanie:

  • Zdefiniuj jeden interfejs RecyclerViewClickListenerdo przekazywania wiadomości z adaptera do Activity/ Fragment:

    public interface RecyclerViewClickListener {
        public void recyclerViewListClicked(View v, int position);
    }
    
  • W Activity/ Fragmentzaimplementuj interfejs, a także przekaż odbiornik do adaptera:

    @Override
    public void recyclerViewListClicked(View v, int position){... ...}
    
    //set up adapter and pass clicked listener this
    myAdapter = new MyRecyclerViewAdapter(context, this);
    
  • W Adapteri 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());     
    
           }
       }
    }
    

Po przetestowaniu działa dobrze.


[ AKTUALIZACJA ]

Od API 22 RecyclerView.ViewHoler.getPosition()jest przestarzałe, więc zamiast tego z getLayoutPosition().

Xcihnegn
źródło
22
użyj metody getLayoutPosition (), ponieważ funkcja getPosition () jest teraz wyłączona.
Ankur Chaudhary
2
dzięki za ten fragment kodu :) tylko jedna wskazówka: odwołaj się do static private static RecyclerViewClickListener itemListener;w konstruktorze.
David Artmann
1
@khurramengr Skończyło się na dodaniu słuchacza do każdego elementu w metodzie onBindViewHolder. Co więcej, nie wszystkie moje pozycje na liście były klikalne (tylko część pozycji).
Ferran Negre
1
Jeżeli nie można za pomocą WeakReference tutaj: new MyRecyclerViewAdapter(context, this)? Może to spowodować wycieki pamięci
RamwiseMatt
2
public void recyclerViewListClicked(View v, int position);Modyfikator publicjest zbędny dla metod interfejsu
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
źródło
4
Dziękuję Ci. GetAdapterPosition () jest tym, czego potrzebowałem.
Ayaz Alifov
1
Dzięki za kod człowieka !! Uratowałem mój dzień. Nie byłem pewien, gdzie umieścić getAdapterPosition () i podążając za twoim kodem, działało ... Miło i łatwo :)
Vinay Vissh
Dziękuję koleś, twój kod był dokładnie taki, jakiego potrzebowałem! Szczęśliwy człowiek
Naveen Nirban Yadav
13

Oto przykład ustawiania detektora kliknięć.

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
źródło
Co to jest getAdapterPostion (); tutaj?
TheDevMan
1
pozycja kliknięcia widoku. nie jest metodą niestandardową.
Gilberto Ibarra
Wydaje się, że jest to najczystszy sposób, aby to zrobić, zwłaszcza że prawie zawsze jesteś zainteresowany pobieraniem danych przy użyciu pozycji i możesz nie mieć dostępu do obiektu RecyclerView.
FrostRocket
int position = getAdapterPosition();
Wielkie
Zwróć uwagę, że wywołanie getAdapterPosition podczas aktualizacji listy, np. Z powodu wywołania notififyXYZ, zwróci -1
David
11

Umieść ten kod w miejscu, w którym definiujesz widok recyklera w działaniu.

    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();
                }
            })
    );

Następnie utwórz osobną klasę i umieść ten kod:

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
źródło
7

utwórz plik java z poniższym kodem

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) {

}

i po prostu użyj detektora w swoim obiekcie RecyclerView.

recyclerView.addOnItemTouchListener(  
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
  @Override public void onItemClick(View view, int position) {
    // TODO Handle item click
  }
}));
MazRoid
źródło
RecyclerItemClickListenernie jest domyślną klasą systemu Android, należy podać używaną bibliotekę lub samą klasę.
Greg
@Greg thanx !! zapomniałem opublikować!
MazRoid
5

Jeśli chcesz zdarzenie Kliknij, aby odtworzyć widok z działania / fragmentu zamiast adaptera, możesz również skorzystać z następującego skrótu.

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;
            }
        });

Możesz także użyć innych długich sposobów, takich jak korzystanie z interfejsu

Amandeep Rohila
źródło
`` Cześć, ale co jeśli musimy również uzyskać pozycję klikniętego elementu. ?
mfaisalhyder
Możesz po prostu ustawić pozycję elementu w TAG-u za pomocą adaptera, a następnie pobrać tag, jak wspomniano powyżej txtStatusChange.getTag ().
ToString
@AmandeepRohila Aby kod działał, muszę najpierw przewinąć do końca poziomego widoku recyklingu. Dopiero wtedy toast działa. Czy nie ma sposobu, aby to działało bez konieczności przewijania w przód iw tył?
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
źródło
Co to za czary? Działa świetnie.
Bolling
2

Użyj poniższego kodu: -

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
źródło
1

RecyclerView nie zapewnia takiej metody.

Aby zarządzać zdarzeniami kliknięć w RecyclerView, skończyło się na implementacji onClickListener w moim adapterze, podczas wiązania ViewHolder: w moim ViewHolder zachowuję odniesienie do widoku głównego (tak jak można to zrobić z obrazami ImageViews, TextViews itp ...) i podczas wiązania the viewHolder Ustawiłem na nim tag z informacjami potrzebnymi do obsługi kliknięcia (np. pozycja) i nasłuchiwaniem kliknięć

Zoubiock
źródło
3
tak, możemy ustawić odbiornik kliknięć w ViewHolder, ale muszę przekazać widok klikniętego elementu i umieścić go w moim fragmencie w celu dalszego przetwarzania
Xcihnegn,
1

Oto najprostszy i najłatwiejszy sposób na znalezienie pozycji klikniętego elementu:

Ja też miałem ten sam problem.

Chciałem znaleźć pozycję klikniętego / wybranego elementu w RecyclerView () i wykonać określone operacje na tym konkretnym elemencie.

Metoda getAdapterPosition () działa jak urok dla tego typu rzeczy. Znalazłem tę metodę po całym dniu długich badań i po wypróbowaniu wielu innych metod.

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

Nie musisz używać żadnej dodatkowej metody. Po prostu utwórz zmienną globalną o nazwie „position” i zainicjalizuj ją za pomocą metody getAdapterPosition () w dowolnej z głównych metod adaptera (klasy lub podobnej).

Oto krótka dokumentacja z tego linku .

getAdapterPosition dodane w wersji 22.1.0 int getAdapterPosition () Zwraca pozycję adaptera elementu reprezentowanego przez ten ViewHolder. Zwróć uwagę, że może się to różnić od metody getLayoutPosition (), jeśli istnieją oczekujące aktualizacje adaptera, ale nie nastąpiło jeszcze przejście nowego układu. RecyclerView nie obsługuje żadnych aktualizacji adaptera do następnego przejścia układu. Może to powodować tymczasowe niespójności między tym, co użytkownik widzi na ekranie, a zawartością adaptera. Ta niespójność nie jest ważna, ponieważ będzie trwać krócej niż 16 ms, ale może stanowić problem, jeśli chcesz użyć pozycji ViewHolder w celu uzyskania dostępu do karty. Czasami może być konieczne określenie dokładnej pozycji adaptera, aby wykonać pewne czynności w odpowiedzi na zdarzenia użytkownika. W takim przypadku należy użyć tej metody, która obliczy położenie adaptera elementu ViewHolder.

Chętnie pomoże. Zapraszam do zadawania wątpliwości.

Himanshu Nimje
źródło
jaki jest najprostszy i najłatwiejszy sposób na uzyskanie wartości klikniętego elementu RecyclerView?
अक्षय परूळेकर
1

Moje proste rozwiązanie

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;
    }
}

Po prostu umieść lub umieść dane, które chcesz uzyskać z aktywności.

Konstruktor adaptera:

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

W aktywności:

 @Override
    protected void onCreate(Bundle savedInstanceState) {

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

        selectedPosition = 0;

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

W adapterze onClickLictener w elemencie
w onBindViewHolder

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

Teraz za każdym razem, gdy zmieniasz pozycję w RecyclerView, jest on trzymany w Holderze (lub może powinien się nazywać Listener)

Mam nadzieję, że to się przyda

Mój pierwszy post; P

Mateusz Niedbal
źródło
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
źródło
3
Dodaj wyjaśnienie, po prostu zrzucenie kodu bez wprowadzenia, a wyjaśnienie, jak to rozwiązuje problem, nie jest zbyt pomocne.
Mark Rotteveel,
0

Spróbuj w ten sposób

Klasa adaptera:

 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);
            }
        });
    }
}

}

W swojej aktywności lub fragmencie:

ContentAdapter adapter = new ContentAdapter(itemList, this);

Uwaga: Zaimplementuj OnItemClickListener na podstawie kontekstu podanego przez Ciebie w działaniu lub fragmentach i metodach zastępczych.

RajeshVijayakumar
źródło
Ładne rozwiązanie powyżej. Czy możesz dodać coś do powyższego, aby pokazać, jak powinna wyglądać metoda onItemClick w działaniu? Próbuję przekazać pozycję elementu do intencji (aby otworzyć następne działanie) i wciąż otrzymuję niewłaściwą pozycję.
AJW
0

Za każdym razem stosuję inne podejście. Wydaje się, że ludzie przechowują lub ustalają pozycję w widoku, zamiast przechowywać odniesienie do obiektu wyświetlanego przez ViewHolder.

Zamiast tego używam tego podejścia i po prostu przechowuję go w ViewHolder, gdy wywoływana jest onBindViewHolder (), i ustawiam odniesienie na null w onViewRecycled ().

Za każdym razem, gdy ViewHolder staje się niewidoczny, jest poddawany recyklingowi. Więc to nie wpływa na duże zużycie pamięci.

@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
źródło
0

Krótkie rozszerzenie dla metody Kotlina
zwraca bezwzględną pozycję wszystkich pozycji (nie pozycję tylko widocznych pozycji).

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

I użycie

val position = recyclerView.getChildPositionAt(event.x, event.y)
Pavel Shorokhov
źródło
0

Użyj metody getLayoutPosition () w metodzie java interfejsu niestandardowego. Spowoduje to zwrócenie wybranej pozycji elementu, sprawdź szczegółowe informacje

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

Rana Aamer
źródło
1
Witamy w Stack Overflow! Chociaż linki to świetny sposób na dzielenie się wiedzą, tak naprawdę nie odpowiedzą na pytanie, jeśli w przyszłości zostaną zerwane. Dodaj do swojej odpowiedzi zasadniczą treść linku, który odpowiada na pytanie. W przypadku, gdy treść jest zbyt złożona lub zbyt duża, aby się tutaj zmieścić, opisz ogólną ideę proponowanego rozwiązania. Pamiętaj, aby zawsze zachować odsyłacz do strony internetowej oryginalnego rozwiązania. Zobacz: Jak napisać dobrą odpowiedź?
sɐunıɔ ןɐ qɐp
0

Projektant może ustawić onClickwłaściwość listItem na metodę zdefiniowaną za pomocą jednego parametru. Mam przykładową metodę zdefiniowaną poniżej. Metoda getAdapterPosition poda indeks wybranego elementu listItem.

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

Aby uzyskać informacje na temat konfigurowania RecyclerView, zapoznaj się z dokumentacją tutaj: https://developer.android.com/guide/topics/ui/layout/recyclerview

Spencer Milner
źródło
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
źródło
3
Odpowiadając na stare pytanie, twoja odpowiedź byłaby o wiele bardziej przydatna dla innych użytkowników StackOverflow, gdybyś zawarł pewien kontekst wyjaśniający, w jaki sposób twoja odpowiedź pomaga, szczególnie w przypadku pytania, na które już została zaakceptowana odpowiedź. Zobacz: Jak napisać dobrą odpowiedź .
David Buck
0

Po wielu próbach i błędach stwierdziłem, że jest na to bardzo łatwy sposób, czyli utworzenie interfejsu w klasie adaptera i zaimplementowanie tego fragmentarycznie, teraz pojawia się zwrot akcji, zainicjowałem model widoku wewnątrz mojej funkcji nadpisującej obecną w teraz możesz wysłać dane z tej funkcji do viemodela, a stamtąd w dowolne miejsce.

Nie wiem, czy ta metoda jest dobrą metodą kodowania, ale daj mi znać w komentarzu, a jeśli ktoś chce zobaczyć, daj mi znać w sekcji komentarzy, regularnie otwieram przepływ stackover.


źródło
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")
                }

            })

Jeśli używasz Kotlin

Sandeep Pareek
źródło
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Богдан Опир
-4

W onViewHolder ustaw onClickListiner na dowolny widok i kliknięcie z boku użyj tego kodu:

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

Zastąp Drawer_Barswoją nazwą aktywności.

Thasreef Mogral
źródło