Nhận mục đã nhấp và vị trí của nó trong RecyclerView


105

Tôi đang thay thế ListViewbằng RecyclerView, danh sách hiển thị ok, nhưng tôi muốn biết cách lấy mục được nhấp và vị trí của nó, tương tự như phương pháp OnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)chúng tôi sử dụng ListView.

Cảm ơn những ý tưởng!


1


cách dễ nhất đối với tôi: CustomSelectionCallback
ATES

Câu trả lời:


177

Dựa trên liên kết: Tại sao RecyclerView không có onItemClickListener ()? và RecyclerView khác với Listview như thế nào? và cũng là ý tưởng chung của @ Duncan, tôi đưa ra giải pháp của mình ở đây:

  • Xác định một giao diện RecyclerViewClickListenerđể chuyển thông báo từ bộ điều hợp đến Activity/ Fragment:

    public interface RecyclerViewClickListener {
        public void recyclerViewListClicked(View v, int position);
    }
  • Trong Activity/ Fragmenttriển khai giao diện và cũng chuyển trình nghe sang bộ điều hợp:

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

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

Sau khi thử nghiệm, nó hoạt động tốt.


[ CẬP NHẬT ]

Vì API 22, RecyclerView.ViewHoler.getPosition()không được dùng nữa nên thay vào đó bằng getLayoutPosition().


22
sử dụng phương thức getLayoutPosition () vì getPosition () được mô tả ngay bây giờ.
Ankur Chaudhary

2
cảm ơn vì đoạn mã này :) chỉ một mẹo: tham chiếu private static RecyclerViewClickListener itemListener;tĩnh theo cách tĩnh trong hàm tạo.
David Artmann

1
@khurramengr Tôi đã kết thúc việc thêm trình nghe vào từng mục trong phương pháp onBindViewHolder. Hơn nữa, mục danh sách của tôi không phải tất cả đều có thể nhấp được (chỉ một phần của mục).
Ferran Negre

1
Bạn không nên sử dụng WeakReference ở đây new MyRecyclerViewAdapter(context, this):? Điều này có thể gây rò rỉ bộ nhớ
RamwiseMatt

2
public void recyclerViewListClicked(View v, int position);Các sửa đổi publiclà không cần thiết cho các phương pháp giao diện
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();
                    }
                }
            });
        }
    }
}

4
Cảm ơn bạn. getAdapterPosition () là những gì tôi cần.
Ayaz Alifov

1
Cảm ơn vì người đàn ông mã !! Đã lưu ngày của tôi. Tôi đã không chắc chắn nơi để đặt getAdapterPosition () và sau mã của bạn tôi đã nhận nó làm việc ... Nice và dễ dàng :)
Vinay Vissh

Cảm ơn bạn rất nhiều, mã của bạn chính xác là tôi cần điều đó! Người đàn ông hạnh phúc
Naveen Nirban Yadav

13

Đây là một ví dụ để thiết lập một Trình nghe nhấp chuột.

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

    }

GetAdapterPostion () là gì; đây?
TheDevMan

1
vị trí của chế độ xem được nhấp vào. không phải là một phương pháp tùy chỉnh.
Gilberto Ibarra

Đây có vẻ như là cách sạch sẽ nhất để làm điều này, đặc biệt là vì bạn hầu như luôn quan tâm đến việc lấy dữ liệu bằng cách sử dụng vị trí và có thể không có quyền truy cập vào đối tượng RecyclerView.
FrostRocket

Cảm ơn rất nhiềuint position = getAdapterPosition();
Shylendra Madda

Xin lưu ý rằng việc gọi getAdapterPosition trong khi danh sách đang được cập nhật, ví dụ: vì đang gọi notififyXYZ, sẽ trả về -1
David

11

Đặt mã này nơi bạn xác định chế độ xem trình tái chế trong hoạt động.

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

Sau đó tạo lớp riêng biệt và đặt mã này:

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

    }
}

7

tạo tệp java với mã bên dưới

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

}

và chỉ sử dụng trình lắng nghe trên đối tượng RecyclerView của bạn.

recyclerView.addOnItemTouchListener(  
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
  @Override public void onItemClick(View view, int position) {
    // TODO Handle item click
  }
}));

RecyclerItemClickListenerkhông phải là một lớp android mặc định, bạn nên cung cấp thư viện bạn đang sử dụng hoặc chính lớp đó.
Greg

@Greg thanx !! tôi quên đăng!
MazRoid

5

Nếu bạn muốn nhấp vào sự kiện tái chế-Xem từ hoạt động / phân đoạn thay vì bộ điều hợp thì bạn cũng có thể sử dụng cách cắt ngắn sau.

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

Bạn cũng có thể sử dụng các cách lâu dài khác như sử dụng giao diện


,, chào bạn, nhưng điều gì sẽ xảy ra nếu chúng ta cũng phải có được vị trí của mục được nhấp vào. ?
mfaisalhyder

Bạn chỉ có thể thiết lập vị trí của mục trong TAG thông qua bộ chuyển đổi và sau đó nhận thẻ như đã đề cập ở trên txtStatusChange.getTag () toString ().
Amandeep Rohila

@AmandeepRohila Để mã hoạt động, trước tiên tôi phải cuộn đến cuối chế độ xem tái chế theo chiều ngang. Chỉ sau đó bánh mì nướng mới hoạt động. Không có cách nào để làm cho nó hoạt động mà không cần phải cuộn qua lại trước?
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) {
            }
        }
    )
);

Đây là phép thuật gì? Hoạt động hoàn hảo.
Bolling

2

Sử dụng mã dưới đây: -

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

    }
}
}

1

RecyclerView không cung cấp phương pháp như vậy.

Để quản lý các sự kiện nhấp chuột trên RecyclerView, tôi đã kết thúc việc triển khai onClickListener trong bộ điều hợp của mình, khi liên kết ViewHolder: Trong ViewHolder của tôi, tôi giữ một tham chiếu đến chế độ xem gốc (như bạn có thể làm với ImageViews, TextViews, v.v.) và khi ràng buộc viewHolder Tôi đã đặt một thẻ trên đó với thông tin tôi cần để xử lý nhấp chuột (chẳng hạn như vị trí) và một công cụ nhấp chuột


3
vâng chúng ta có thể thiết lập nhấp chuột nghe trong ViewHolder, nhưng tôi cần phải vượt qua trở lại quan điểm mục nhấp và vị trí để đoạn của tôi cho quá trình tiếp tục
Xcihnegn

1

Đây là cách đơn giản và dễ dàng nhất để tìm vị trí của mục được nhấp:

Tôi cũng phải đối mặt với vấn đề tương tự.

Tôi muốn tìm vị trí của mục được nhấp / chọn của RecyclerView () và thực hiện một số thao tác cụ thể trên mục cụ thể đó.

Phương thức getAdapterPosition () hoạt động giống như một sự quyến rũ cho những loại nội dung này. Tôi tìm ra phương pháp này sau một ngày dài nghiên cứu và sau khi thử nhiều phương pháp khác.

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

Bạn không phải sử dụng thêm bất kỳ phương pháp nào. Chỉ cần tạo một biến toàn cục có tên 'position' và khởi tạo nó bằng getAdapterPosition () trong bất kỳ phương thức chính nào của bộ điều hợp (lớp hoặc tương tự).

Đây là một tài liệu ngắn gọn từ liên kết này .

getAdapterPosition được thêm vào phiên bản 22.1.0 int getAdapterPosition () Trả về vị trí Bộ điều hợp của mục được đại diện bởi ViewHolder này. Lưu ý rằng điều này có thể khác với getLayoutPosition () nếu có các bản cập nhật bộ điều hợp đang chờ xử lý nhưng một lần chuyển bố cục mới vẫn chưa xảy ra. RecyclerView không xử lý bất kỳ bản cập nhật bộ điều hợp nào cho đến khi duyệt bố cục tiếp theo. Điều này có thể tạo ra sự mâu thuẫn tạm thời giữa những gì người dùng nhìn thấy trên màn hình và nội dung của bộ điều hợp. Sự không nhất quán này không quan trọng vì nó sẽ nhỏ hơn 16ms nhưng có thể là một vấn đề nếu bạn muốn sử dụng vị trí ViewHolder để truy cập bộ điều hợp. Đôi khi, bạn có thể cần phải có được vị trí bộ điều hợp chính xác để thực hiện một số hành động nhằm đáp ứng các sự kiện của người dùng. Trong trường hợp đó, bạn nên sử dụng phương pháp này sẽ tính toán vị trí Bộ điều hợp của ViewHolder.

Vui vẻ giúp đỡ. Hãy đặt nghi ngờ.


cách đơn giản và dễ dàng nhất để nhận giá trị của mục đã nhấp của RecyclerView là gì?
अक्षय परूळेकर

1

Giải pháp đơn giản của tôi

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

Chỉ định vị hoặc đặt dữ liệu bạn cần lấy từ hoạt động.

Hàm tạo bộ điều hợp:

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

Trong Hoạt động:

 @Override
    protected void onCreate(Bundle savedInstanceState) {

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

        selectedPosition = 0;

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

Trong Bộ điều hợp onClickLictener trong mục
trong onBindViewHolder

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

Bây giờ bất cứ khi nào bạn thay đổi vị trí trong RecyclerView, nó sẽ được lưu giữ trong Holder (hoặc có thể nó nên được gọi là Listener)

Tôi hy vọng nó sẽ hữu ích

Bài đầu tiên của tôi; P


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

        }
    });
}

3
Vui lòng thêm một lời giải thích, chỉ kết xuất mã mà không có phần giới thiệu và giải thích cách khắc phục sự cố này không hữu ích lắm.
Mark Rotteveel

0

Hãy thử theo cách này

Lớp tiếp hợp:

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

}

Trong Hoạt động hoặc phân đoạn của bạn:

ContentAdapter adapter = new ContentAdapter(itemList, this);

Lưu ý: Triển khai OnItemClickListener dựa trên ngữ cảnh do bạn cung cấp trong các phương thức hoạt động hoặc phân đoạn và ghi đè.


Giải pháp tốt đẹp ở trên. Bạn có thể thêm vào phần trên để hiển thị phương thức onItemClick trong Activity không? Tôi đang cố gắng chuyển vị trí của vật phẩm sang Ý định (để mở Hoạt động tiếp theo) và tôi tiếp tục nhầm vị trí.
AJW

0

Mỗi khi tôi sử dụng cách tiếp cận khác. Mọi người dường như lưu trữ hoặc có được vị trí trên một dạng xem, thay vì lưu trữ một tham chiếu đến một đối tượng được ViewHolder hiển thị.

Thay vào đó, tôi sử dụng phương pháp này và chỉ lưu trữ nó trong ViewHolder khi onBindViewHolder () được gọi và đặt tham chiếu thành null trong onViewRecycled ().

Mỗi khi ViewHolder trở nên vô hình, nó sẽ được tái chế. Vì vậy, điều này không ảnh hưởng đến việc tiêu thụ bộ nhớ lớn.

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

0

Phần mở rộng ngắn cho Phương pháp Kotlin
trả về vị trí tuyệt đối của tất cả các mục (không phải vị trí của chỉ các mục hiển thị).

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

Và cách sử dụng

val position = recyclerView.getChildPositionAt(event.x, event.y)

0

Sử dụng getLayoutPosition () trong phương thức java giao diện tùy chỉnh của bạn. Thao tác này sẽ trả về vị trí đã chọn của một mục, hãy kiểm tra chi tiết đầy đủ trên

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


1
Chào mừng bạn đến với Stack Overflow! Mặc dù các liên kết là cách tuyệt vời để chia sẻ kiến ​​thức, nhưng chúng sẽ không thực sự trả lời câu hỏi nếu chúng bị hỏng trong tương lai. Thêm vào câu trả lời của bạn nội dung thiết yếu của liên kết trả lời câu hỏi. Trong trường hợp nội dung quá phức tạp hoặc quá lớn không thể phù hợp ở đây, hãy mô tả ý tưởng chung của giải pháp đề xuất. Hãy nhớ luôn giữ liên kết tham chiếu đến trang web của giải pháp gốc. Xem: Làm thế nào để viết một câu trả lời tốt?
sɐunıɔ ןɐ qɐp

0

Từ trình thiết kế, bạn có thể đặt thuộc onClicktính của listItem thành một phương thức được xác định bằng một tham số duy nhất. Tôi có một phương pháp ví dụ được định nghĩa bên dưới. Phương thức getAdapterPosition sẽ cung cấp cho bạn chỉ mục của listItem đã chọn.

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

Để biết thông tin về cách thiết lập RecyclerView, hãy xem tài liệu tại đây: https://developer.android.com/guide/topics/ui/layout/recyclerview


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

3
Khi trả lời một câu hỏi cũ, câu trả lời của bạn sẽ hữu ích hơn nhiều đối với những người dùng StackOverflow khác nếu bạn bao gồm một số ngữ cảnh để giải thích câu trả lời của bạn giúp ích như thế nào, đặc biệt đối với một câu hỏi đã có câu trả lời được chấp nhận. Xem: Làm thế nào để tôi viết một câu trả lời tốt .
David Buck

0

Sau nhiều lần thử và sai, tôi thấy rằng có một cách rất dễ dàng để thực hiện điều này đó là tạo một giao diện trong lớp bộ điều hợp và triển khai giao diện đó trong phân đoạn bây giờ đến đây là bước ngoặt, tôi đã cài đặt mô hình xem bên trong hàm ghi đè của mình. Bây giờ bạn có thể gửi dữ liệu từ hàm đó tới viemodel và từ đó ở bất cứ đâu.

Tôi không biết phương pháp này có phải là phương pháp mã hóa tốt hay không nhưng vui lòng cho tôi biết trong bình luận và nếu có ai muốn xem hãy cho tôi biết trong phần bình luận, tôi thường xuyên mở luồng stackover.


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

            })

Nếu sử dụng Kotlin


Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do tại sao điều này giải quyết vấn đề sẽ thực sự giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều phiếu bầu hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những giới hạn và giả định áp dụng.
Богдан Опир

-4

Trong onViewHolder, đặt onClickListiner thành bất kỳ chế độ xem nào và nhấp vào bên cạnh sử dụng mã này:

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

Thay thế Drawer_Barbằng tên Hoạt động của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.