java - কেন RecyclerView onItemClickListener ()?





android android-recyclerview (25)


পুনর্ব্যবহারযোগ্য অ্যানিমেশন পরীক্ষা করা হয় নি, অন্য স্বাভাবিক। আমি এটা সর্বাধিক অপ্টিমাইজ করা হয়েছে মনে হয়। ইন্টারফেস অন্যান্য ব্যবহার আছে, আপনি সাময়িকভাবে উপেক্ষা করতে পারেন।

public abstract class BaseAdapterRV<VH extends BaseViewHolder> extends RecyclerView.Adapter<VH> implements AdapterInterface {
    public final String TAG = getClass().getSimpleName();

    protected final Activity mActivity;
    protected final LayoutInflater mInflater;
    protected ItemClickInterface<?, Integer> mListener;

    public BaseAdapterRV(Activity activity) {
        mActivity = activity;
        mInflater = LayoutInflater.from(mActivity);
    }

    @Override
    public final VH onCreateViewHolder(ViewGroup parent, int viewType) {
        return onCreateViewHolder(parent, viewType, mInflater);
    }

    @Override
    public final void onBindViewHolder(VH holder, int position) {
        holder.itemView.setTag(R.id.tag_view_click, position);
        //创建点击事件
        holder.itemView.setOnClickListener(mListener);
        holder.itemView.setOnLongClickListener(mListener);
        onBindVH(holder, position);
    }


    ///////////////////////////////////////////////////////////////////////////
    // 以下是增加的方法
    ///////////////////////////////////////////////////////////////////////////

    /**
     * 注意!涉及到notifyItemInserted刷新时立即获取position可能会不正确
     * 里面也有onItemLongClick
     */
    public void setOnItemClickListener(ItemClickInterface<?, Integer> listener) {
        mListener = listener;
        notifyDataSetChanged();
    }

    @NonNull
    protected abstract VH onCreateViewHolder(ViewGroup parent, int viewType, LayoutInflater inflater);

    protected abstract void onBindVH(VH holder, int position);

}

এই ইন্টারফেস হয়

/**
 * OnItemClickListener的接口
 * 见子类实现{@link OnItemClickListener}{@link OnItemItemClickListener}
 */
public interface ItemClickInterface<DATA1, DATA2> extends View.OnClickListener, View.OnLongClickListener {

    void onItemClick(DATA1 data1, DATA2 data2);

    boolean onItemLongClick(DATA1 data1, DATA2 data2);
}

এটি একটি বিমূর্ত শ্রেণী

public abstract class OnItemClickListener<DATA> implements ItemClickInterface<View, DATA> {
    @Override
    public void onClick(View v) {
        onItemClick(v, (DATA) v.getTag(R.id.tag_view_click));
    }

    @Override
    public boolean onLongClick(View v) {
        return onItemLongClick(v, (DATA) v.getTag(R.id.tag_view_click));
    }

    @Override
    public boolean onItemLongClick(View view, DATA data) {
        return false;
    }
}

আপনি শুধুমাত্র এটি প্রয়োজন

    mAdapter.setOnItemClickListener(new OnItemClickListener<Integer>() {
        @Override
        public void onItemClick(View view, Integer integer) {

        }

        @Override
        public boolean onItemLongClick(View view, Integer integer) {
            return true;
        }
    });

আমি RecyclerView অনুসন্ধান করছিলাম এবং আমি দেখেছি যে RecyclerView onItemClickListener()RecyclerView প্রসারিত কারণ

android.view.ViewGroup

এবং ListView প্রসারিত

android.widget.AbsListView

। যাইহোক আমি আমার onClick মধ্যে ক্লিক ক্লিক করে আমার সমস্যা সমাধান:

public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    }

    @Override
    public void onClick(View v) {

    }
}

কিন্তু এখনও আমি জানতে চাই কেন Google onItemClickListener() কে সরানো হয়েছে?

একটি কর্মক্ষমতা সমস্যা বা অন্য কিছু আছে?




PlaceHolderView ব্যবহার PlaceHolderView

@Layout(R.layout.item_view_1)
public class View1{

    @View(R.id.txt)
    public TextView txt;

    @Resolve
    public void onResolved() {
        txt.setText(String.valueOf(System.currentTimeMillis() / 1000));
    }

    @Click(R.id.btn)
    public void onClick(){
        txt.setText(String.valueOf(System.currentTimeMillis() / 1000));
    }
}



আমি অ্যান্ড্রয়েড পুনর্ব্যবহারযোগ্য ভিউ আইটেম হ্যান্ডেল করার জন্য একটি লাইব্রেরি লিখেছেন ইভেন্ট ক্লিক করুন। আপনি https://github.com/ChathuraHettiarachchi/RecycleClick সম্পূর্ণ টিউটোরিয়ালটি সন্ধান করতে পারেনhttps://github.com/ChathuraHettiarachchi/RecycleClick

RecycleClick.addTo(YOUR_RECYCLEVIEW).setOnItemClickListener(new RecycleClick.OnItemClickListener() {
            @Override
            public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                // YOUR CODE
            }
        });

বা আইটেম দীর্ঘ লম্বা প্রেস হ্যান্ডেল ব্যবহার করতে পারেন

RecycleClick.addTo(YOUR_RECYCLEVIEW).setOnItemLongClickListener(new RecycleClick.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClicked(RecyclerView recyclerView, int position, View v) {
                // YOUR CODE
                return true;
            }
        });



আপনার যদি POJO গুলির একটি তালিকা থাকে এবং এটিকে অ্যাডাপ্টারের বাইরে থেকে ক্লিক করে পুনরুদ্ধার করতে চান তবে এখানে এটি সহজে প্রয়োগ করার একটি উপায়।

আপনার অ্যাডাপ্টারে, ক্লিক ইভেন্টগুলির জন্য শ্রোতা তৈরি করুন এবং এটি সেট করার একটি পদ্ধতি তৈরি করুন:

public class MyAdapter extends RecyclerView.Adapter<SitesListAdapter.ViewHolder> {
...
private List<MyPojo> mMyPojos;
private static OnItemClickListener mOnItemClickListener;

...
public interface OnItemClickListener {
    public void onItemClick(MyPojo pojo);
}

...
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
    mOnItemClickListener = onItemClickListener;
}
...

}

আপনার ভিউ হোল্ডারে, অন ক্লিকলিস্টার প্রয়োগ করুন এবং POJO সাময়িকভাবে উপস্থাপন করছে এমন একটি শ্রেণির সদস্য তৈরি করুন যা দৃশ্যটি উপস্থাপিত হচ্ছে, এভাবে (এটি একটি উদাহরণ, একটি সেট্টার তৈরি করা আরও ভাল হবে):

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public MyPojo mCurrentPojo;
    ...
    public ViewHolder(View view) {
        super(v);
        ...
        view.setOnClickListener(this); //You could set this on part of the layout too
    }

    ...
    @Override
    public void onClick(View view) {
        if(mOnItemClickListener != null && mCurrentPojo != null){
            mOnItemClickListener.onItemClick(mCurrentPojo);
        }
    }

আপনার অ্যাডাপ্টারে ফিরে, ভিউহোলার আবদ্ধ থাকলে বর্তমান POJO সেট করুন (বা বর্তমান দৃশ্যটি যদি না থাকে তবে নল করুন):

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    final MyPojo currentPojo = mMyPojos.get(position); 
    holder.mCurrentPojo = currentPojo;
    ...

এটি যে, এখন আপনি এটি আপনার টুকরা / ক্রিয়াকলাপ থেকে এটি ব্যবহার করতে পারেন:

    mMyAdapter.setOnItemClickListener(new mMyAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(MyPojo pojo) {
            //Do whatever you want with your pojo here
        }
    });



কিভাবে সব একসাথে উদাহরণ স্থাপন করা ...

  • onclick () হ্যান্ডলিং
  • কার্সার - পুনর্ব্যবহারযোগ্য দেখুন
  • ViewHolder ধরনের

    public class OrderListCursorAdapter extends CursorRecyclerViewAdapter<OrderListCursorAdapter.ViewHolder> {
    
    private static final String TAG = OrderListCursorAdapter.class.getSimpleName();
    private static final int ID_VIEW_HOLDER_ACTUAL = 0;
    private static final int ID_VIEW_HOLDER = 1;
    
    public OrderListCursorAdapter(Context context, Cursor cursor) {
        super(context, cursor);
    }
    
    public static class ViewHolderActual extends ViewHolder {
        private static final String TAG = ViewHolderActual.class.getSimpleName();
        protected IViewHolderClick listener;
        protected Button button;
    
        public ViewHolderActual(View v, IViewHolderClick listener) {
            super(v, listener);
            this.listener = listener;
            button = (Button) v.findViewById(R.id.orderList_item_button);
            button.setOnClickListener(this);
        }
    
        public void initFromData(OrderData data) {
            Log.d(TAG, "><initFromData(data=" + data + ")");
            orderId = data.getId();
            vAddressStart.setText(data.getAddressStart());
            vAddressEnd.setText(data.getAddressEnd());
        }
    
        @Override
        public void onClick(View view) {
            if (view instanceof Button) {
                listener.onButtonClick((Button) view, getPosition(), this);
            } else {
                super.onClick(view);
            }
        }
    
        public interface IViewHolderClick extends ViewHolder.IViewHolderClick {
            public void onButtonClick(Button button, int position, ViewHolder viewHolder);
        }
    }
    
    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private static final String TAG = ViewHolder.class.getSimpleName();
        protected long orderId;
        protected IViewHolderClick listener;
        protected TextView vAddressStart;
        protected TextView vAddressEnd;
        protected TextView vStatus;
    
        public ViewHolder(View v, IViewHolderClick listener) {
            super(v);
            this.listener = listener;
            v.setOnClickListener(this);
    
            vAddressStart = (TextView) v.findViewById(R.id.addressStart);
            vAddressEnd = (TextView) v.findViewById(R.id.addressEnd);
            vStatus = (TextView) v.findViewById(R.id.status);
        }
    
        public void initFromData(OrderData data) {
            Log.d(TAG, "><initFromData(data=" + data + ")");
            orderId = data.getId();
            vAddressStart.setText(data.getAddressStart());
            vAddressEnd.setText(data.getAddressEnd());
        }
    
        public long getOrderId() {
            return orderId;
        }
    
        @Override
        public void onClick(View view) {
            listener.onCardClick(view, getPosition(), this);
        }
    
        public interface IViewHolderClick {
            public void onCardClick(View view, int position, ViewHolder viewHolder);
        }
    }
    
    @Override
    public int getItemViewType(int position) {
        return position == 0 ? ID_VIEW_HOLDER_ACTUAL : ID_VIEW_HOLDER;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, ">>onCreateViewHolder(parent=" + parent + ", viewType=" + viewType + ")");
    
        ViewHolder result;
    
        switch (viewType) {
            case ID_VIEW_HOLDER_ACTUAL: {
                View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout_actual, parent, false);
                result = new ViewHolderActual(itemView, new ViewHolderActual.IViewHolderClick() {
                    @Override
                    public void onCardClick(View view, int position, ViewHolder viewHolder) {
                        Log.d(TAG, "><onCardClick(view=" + view + ", position=" + position + ", viewHolder=" + viewHolder + ")");
                        Intent intent = new Intent(view.getContext(), OrderDetailActivity.class);
                        intent.putExtra(OrderDetailActivity.ARG_ORDER_ID, viewHolder.getOrderId());
                        view.getContext().startActivity(intent);
                    }
    
                    @Override
                    public void onButtonClick(Button button, int position, ViewHolder viewHolder) {
                        Log.d(TAG, "><onButtonClick(button=" + button + ", position=" + position + ", viewHolder=" + viewHolder + ")");
                        Intent intent = new Intent(button.getContext(), OrderMapActivity.class);
                        intent.putExtra(OrderMapActivity.ARG_ORDER_ID, viewHolder.getOrderId());
                        button.getContext().startActivity(intent);
                    }
                });
                break;
            }
            case ID_VIEW_HOLDER:
            default: {
                View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout, parent, false);
                result = new ViewHolder(itemView, new ViewHolder.IViewHolderClick() {
                    @Override
                    public void onCardClick(View view, int position, ViewHolder viewHolder) {
                        Log.d(TAG, "><onCardClick(view=" + view + ", position=" + position + ", viewHolder=" + viewHolder + ")");
                        Intent intent = new Intent(view.getContext(), OrderDetailActivity.class);
                        intent.putExtra(OrderDetailActivity.ARG_ORDER_ID, viewHolder.getOrderId());
                        view.getContext().startActivity(intent);
                    }
                });
                break;
            }
        }
    
        Log.d(TAG, "<<onCreateViewHolder(parent=" + parent + ", viewType=" + viewType + ")= " + result);
        return result;
    }
    
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {
        Log.d(TAG, "><onBindViewHolder(viewHolder=" + viewHolder + ", cursor=" + cursor + ")");
        final OrderData orderData = new OrderData(cursor);
        viewHolder.initFromData(orderData);
    }
    }



এখানে আপনি একাধিক onclick কোড নিচে দেখুন এবং এটি খুব দক্ষ হ্যান্ডেল করতে পারেন

    public class RVNewsAdapter extends RecyclerView.Adapter<RVNewsAdapter.FeedHolder> {

    private Context context;
    List<News> newsList;
    // Allows to remember the last item shown on screen
    private int lastPosition = -1;

    public RVNewsAdapter(List<News> newsList, Context context) {
        this.newsList = newsList;
        this.context = context;
    }

    public static class FeedHolder extends RecyclerView.ViewHolder implements OnClickListener {

        ImageView img_main;
        TextView tv_title;
        Button bt_facebook, bt_twitter, bt_share, bt_comment;


        public FeedHolder(View itemView) {
            super(itemView);

            img_main = (ImageView) itemView.findViewById(R.id.img_main);
            tv_title = (TextView) itemView.findViewById(R.id.tv_title);
            bt_facebook = (Button) itemView.findViewById(R.id.bt_facebook);
            bt_twitter = (Button) itemView.findViewById(R.id.bt_twitter);
            bt_share = (Button) itemView.findViewById(R.id.bt_share);
            bt_comment = (Button) itemView.findViewById(R.id.bt_comment);

            img_main.setOnClickListener(this);
            bt_facebook.setOnClickListener(this);
            bt_twitter.setOnClickListener(this);
            bt_comment.setOnClickListener(this);
            bt_share.setOnClickListener(this);

        }


        @Override
        public void onClick(View v) {

            if (v.getId() == bt_comment.getId()) {

                Toast.makeText(v.getContext(), "Comment  " , Toast.LENGTH_SHORT).show();

            } else if (v.getId() == bt_facebook.getId()) {

                Toast.makeText(v.getContext(), "Facebook  " , Toast.LENGTH_SHORT).show();

            } else if (v.getId() == bt_twitter.getId()) {

                Toast.makeText(v.getContext(), "Twitter  " , Toast.LENGTH_SHORT).show();

            } else if (v.getId() == bt_share.getId()) {

                Toast.makeText(v.getContext(), "share  " , Toast.LENGTH_SHORT).show();

            }
            else {
                Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public FeedHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.feed_row, parent, false);
        FeedHolder feedHolder = new FeedHolder(view);

        return feedHolder;
    }

    @Override
    public void onBindViewHolder(FeedHolder holder, int position) {

        holder.tv_title.setText(newsList.get(position).getTitle());


        // Here you apply the animation when the view is bound
        setAnimation(holder.img_main, position);
    }

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


    /**
     * Here is the key method to apply the animation
     */
    private void setAnimation(View viewToAnimate, int position) {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition) {
            Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }


}



আমি RecyclerView থেকে একটি অভিপ্রায় শুরু করার জন্য এই পদ্ধতি ব্যবহার করুন:

@Override
 public void onBindViewHolder(ViewHolder viewHolder, int i) {

    final MyClass myClass = mList.get(i);
    viewHolder.txtViewTitle.setText(myclass.name);
   ...
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
      @Override
       public void onClick(View v){
             Intent detailIntent = new Intent(mContext, type.class);                                                            
             detailIntent.putExtra("MyClass", myclass);
             mContext.startActivity(detailIntent);
       }
}
);



হ্যা, তুমি পারো

public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {

    //inflate the view 

    View view = LayoutInflator.from(parent.getContext()).inflate(R.layout.layoutID,null);

    ViewHolder holder = new ViewHolder(view);

    //here we can set onClicklistener
    view.setOnClickListener(new  View.OnClickListeener(){
        public void onClick(View v)
        {
            //action
        }
    });

return holder;



@Marmor ধন্যবাদ, আমি আমার উত্তর আপডেট।

আমি viewHolder ক্লাস কন্সট্রকটারে onClick () হ্যান্ডেল করার জন্য এটি একটি ভাল সমাধান এবং OnItemClickListener ইন্টারফেসের মাধ্যমে এটি প্যারেন্ট ক্লাসে প্রেরণ করি।

MyAdapter.java

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

private LayoutInflater layoutInflater;
private List<MyObject> items;
private AdapterView.OnItemClickListener onItemClickListener;

public MyAdapter(Context context, AdapterView.OnItemClickListener onItemClickListener, List<MyObject> items) {
    layoutInflater = LayoutInflater.from(context);
    this.items = items;
    this.onItemClickListener = onItemClickListener;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.my_row_layout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    MyObject item = items.get(position);
}

public MyObject getItem(int position) {
    return items.get(position);
}


class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    private TextView title;
    private ImageView avatar;

    public ViewHolder(View itemView) {
        super(itemView);
        title = itemView.findViewById(R.id.title);
        avatar = itemView.findViewById(R.id.avatar);

        title.setOnClickListener(this);
        avatar.setOnClickListener(this);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //passing the clicked position to the parent class
        onItemClickListener.onItemClick(null, view, getAdapterPosition(), view.getId());
    }
}
}

অন্যান্য ক্লাসে অ্যাডাপ্টারের ব্যবহার:

MyFragment.java

public class MyFragment extends Fragment implements AdapterView.OnItemClickListener {

private RecyclerView recycleview;
private MyAdapter adapter;

    .
    .
    .

private void init(Context context) {
    //passing this fragment as OnItemClickListener to the adapter
    adapter = new MyAdapter(context, this, items);
    recycleview.setAdapter(adapter);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //you can get the clicked item from the adapter using its position
    MyObject item = adapter.getItem(position);

    //you can also find out which view was clicked
    switch (view.getId()) {
        case R.id.title:
            //title view was clicked
            break;
        case R.id.avatar:
            //avatar view was clicked
            break;
        default:
            //the whole row was clicked
    }
}

}



tl; dr 2016 ক্লিকের জন্য একটি পর্যবেক্ষক প্রকাশ করার জন্য RxJava এবং একটি প্রকাশক ব্যবহার করুন।

public class ReactiveAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    String[] mDataset = { "Data", "In", "Adapter" };

    private final PublishSubject<String> onClickSubject = PublishSubject.create();

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) {
        final String element = mDataset[position];

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               onClickSubject.onNext(element);
            }
        });
    }

    public Observable<String> getPositionClicks(){
        return onClickSubject.asObservable();
    }
}

মূল পোস্ট:

ListView প্রবর্তনের পরে, ListView onItemClickListener সমস্যাযুক্ত হয়েছে। যে মুহূর্তে আপনার কোনও অভ্যন্তরীণ উপাদানের জন্য একটি ক্লিক শ্রোতা আছে সেটি কলব্যাক ট্রিগার করা হবে না তবে এটি বিজ্ঞাপিত বা ভাল নথিভুক্ত করা হয়নি (যদি তা হয়) তাই এতে অনেক বিভ্রান্তি এবং এটি সম্পর্কে অনেক প্রশ্ন ছিল।

RecyclerView এটি একটি ধাপ এগিয়ে নিয়ে যায় এবং একটি সারি / কলামের ধারণা নেই তবে বরং ইচ্ছাকৃতভাবে শিশুদের দ্বারা নির্ধারিত পরিমাণে, তারা তাদের প্রতিটিতে অন-ক্লিক করে প্রোগ্রামার বাস্তবায়ন করে।

Recyclerview একটি তালিকা ListView 1: 1 প্রতিস্থাপন হিসাবে নয় বরং জটিল ব্যবহারের ক্ষেত্রে আরও বেশি নমনীয় উপাদান হিসাবে মনে করুন। এবং আপনি যেমন বলেন, আপনার সমাধানটি Google আপনার কাছ থেকে কী প্রত্যাশা করেছে। এখন আপনার কাছে একটি অ্যাডাপ্টার রয়েছে যা কনস্ট্রাক্টরটিতে প্রেরিত একটি ইন্টারফেসে অন-ক্লিক করতে পারে, যা তালিকা ListView এবং Recyclerview উভয়ের জন্য সঠিক প্যাটার্ন।

public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;
    public IMyViewHolderClicks mListener;

    public ViewHolder(View itemLayoutView, IMyViewHolderClicks listener) {
        super(itemLayoutView);
        mListener = listener;
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        imgViewIcon.setOnClickListener(this);
        itemLayoutView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v instanceof ImageView){
           mListener.onTomato((ImageView)v);
        } else {
           mListener.onPotato(v);
        }
    }

    public static interface IMyViewHolderClicks {
        public void onPotato(View caller);
        public void onTomato(ImageView callerImage);
    }

}

এবং তারপর আপনার অ্যাডাপ্টারের উপর

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

   String[] mDataset = { "Data" };

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

       MyAdapter.ViewHolder vh = new ViewHolder(v, new MyAdapter.ViewHolder.IMyViewHolderClicks() { 
           public void onPotato(View caller) { Log.d("VEGETABLES", "Poh-tah-tos"); };
           public void onTomato(ImageView callerImage) { Log.d("VEGETABLES", "To-m8-tohs"); }
        });
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) {
        // Get element from your dataset at this position 
        // Replace the contents of the view with that element 
        // Clear the ones that won't be used
        holder.txtViewTitle.setText(mDataset[position]);
    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
        return mDataset.length;
    } 
  ...

এখন কোডের শেষ টুকরাটি দেখুন: onCreateViewHolder(ViewGroup parent, int viewType) স্বাক্ষর ইতিমধ্যে ভিন্ন দর্শনের ধরনগুলি সুপারিশ করে। তাদের প্রত্যেকের জন্য আপনাকেও একটি ভিন্ন ভিউহোল্ডারের প্রয়োজন হবে এবং পরবর্তীতে তাদের প্রত্যেকেই ক্লিকগুলির একটি ভিন্ন সেট রাখতে পারে। অথবা আপনি কেবলমাত্র একটি জেনেরিক ভিউহোল্ডার তৈরি করতে পারেন যা কোনও দৃশ্য এবং এক onClickListener নেয় এবং সেই অনুযায়ী প্রয়োগ করে। অথবা অর্কেস্ট্রেটারে এক স্তরের প্রতিনিধিত্ব করুন যাতে বিভিন্ন ক্লিক / আচরণের বিভিন্ন ক্লিকের সাথে একই তালিকা থাকে। আবার, সব নমনীয়তা আপনার পাশে হয়।

এটি আসলে একটি প্রয়োজনীয় উপাদান এবং ListView আমাদের অভ্যন্তরীণ বাস্তবায়ন এবং উন্নতিগুলির জন্য মোটামুটি কাছাকাছি ছিল। গুগল অবশেষে এটি স্বীকার করে ভাল।




> পুনর্ব্যবহারযোগ্য ভিউ তালিকা থেকে ভিন্ন কিভাবে?

একটি পার্থক্য হল যে LayoutManager ক্লাসটি LayoutManager সাথে রয়েছে যার মাধ্যমে আপনি আপনার RecyclerView ভিউ পরিচালনা করতে RecyclerView

অনুভূমিক বা উল্লম্ব স্ক্রোলিং LinearLayoutManager দ্বারা

GridLayoutManager দ্বারা GridLayoutManager

StaggeredGridLayoutManager দ্বারা গ্রিডলাইউট StaggeredGridLayoutManager

RecyclerView জন্য অনুভূমিক স্ক্রোলিং জন্য পছন্দ করুন-

LinearLayoutManager llm = new LinearLayoutManager(context);
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(llm);



ইন্টারফেস View.OnClickListener এর ভিতরে থাকা ধারককে দেখুন অথবা তৈরি করুন এবং ইন্টারফেস করুন এবং আপনার কার্যকলাপে ইন্টারফেস বাস্তবায়ন করুন .. আমি অনক্লিক লাস্টারের প্রয়োগের জন্য এই কোডটি সহজে ব্যবহার করেছি।

public static class SimpleStringRecyclerViewAdapter
            extends RecyclerView.Adapter<SimpleStringRecyclerViewAdapter.ViewHolder> {

        // Your initializations goes here...
        private List<String> mValues;

        public static class ViewHolder extends RecyclerView.ViewHolder {

            //create a variable mView
            public final View mView;

            /*All your row widgets goes here
            public final ImageView mImageView;
            public final TextView mTextView;*/

            public ViewHolder(View view) {
                super(view);
                //Initialize it here
                mView = view;

                /* your row widgets initializations goes here
                mImageView = (ImageView) view.findViewById(R.id.avatar);
                mTextView = (TextView) view.findViewById(android.R.id.text1);*/
            }
        }

        public String getValueAt(int position) {
            return mValues.get(position);
        }

        public SimpleStringRecyclerViewAdapter(Context context, List<String> items) {

            mBackground = mTypedValue.resourceId;
            mValues = items;
        }

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

        @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {
            holder.mBoundString = mValues.get(position);
            holder.mTextView.setText(mValues.get(position));

            //Here it is simply write onItemClick listener here
            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Context context = v.getContext();
                    Intent intent = new Intent(context, ExampleActivity.class);

                    context.startActivity(intent);
                }
            });
        }

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



আমি এই ভাবে করেছি, এটি খুব সহজ:

ক্লিক করা পুনর্ব্যবহারযোগ্য অবস্থানের জন্য মাত্র 1 লাইন যুক্ত করুন:

int position = getLayoutPosition()

ViewHolder ক্লাসের জন্য সম্পূর্ণ কোড:

private class ChildViewHolder extends RecyclerView.ViewHolder {
        public ImageView imageView;
        public TextView txtView;

        public ChildViewHolder(View itemView) {
            super(itemView);
            imageView= (ImageView)itemView.findViewById(R.id.imageView);
            txtView= (TextView) itemView.findViewById(R.id.txtView);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.i("RecyclerView Item Click Position", String.valueOf(getLayoutPosition()));
                }
            });
        }
    }

আশা করি এটা তোমাকে সাহায্য করবে।




@ এমএল প্রোগ্রামার-সিআইএম এর উত্তর পড়ার পর, এখানে আমার কোডটি রয়েছে:

class NormalViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    @Bind(R.id.card_item_normal)
    CardView cardView;

    public NormalViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v instanceof CardView) {
            // use getAdapterPosition() instead of getLayoutPosition()
            int itemPosition = getAdapterPosition();
            removeItem(itemPosition);
        }
    }
}



অ্যাক্সেস mainViewএর rowLayout(cell)জন্য RecyclerViewএবং আপনার মধ্যে OnBindViewHolderলেখার এই কোড:

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        Movie movie = moviesList.get(position);
        holder.mainView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.out.println("pos " + position);
            }
        });
    }



যতদূর আমি MLPogrammer-CiM উত্তরটি বুঝি, কেবল এটিই করা সম্ভব:

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    private ImageView image;
    private TextView title;
    private TextView price;

    public MyViewHolder(View itemView) {
        super(itemView);
        image = (ImageView)itemView.findViewById(R.id.horizontal_list_image);
        title = (TextView)itemView.findViewById(R.id.horizontal_list_title);
        price = (TextView)itemView.findViewById(R.id.horizontal_list_price);
        image.setOnClickListener(this);
        title.setOnClickListener(this);
        price.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Item click nr: "+getLayoutPosition(), Toast.LENGTH_SHORT).show();
    }
}



 main_recyclerview.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e)
        {
            int position=rv.getChildAdapterPosition(rv.findChildViewUnder(e.getX(),e.getY()));

            switch (position)
            {
                case 0:
                {
                    wifi(position);
                    adapter2.notifyDataSetChanged();
                }
                break;

                case 1:
                {
                    sound(position);
                    adapter2.notifyDataSetChanged();
                }
                break;

                case 2:
                {
                    bluetooth(position);
                    adapter2.notifyDataSetChanged();
                }
                break;


            }
            return true;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e)
        {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });



এই একটি পরীক্ষা করে দেখুন যেখানে আমি সব কিছু সঠিকভাবে প্রয়োগ করেছি

RecyclerViewHolder ক্লাস

public class RecyclerViewHolder extends RecyclerView.ViewHolder  {

    //view holder is for girdview as we used in the listView
    public ImageView imageView,imageView2;
    public RecyclerViewHolder(View itemView) {
        super(itemView);
        this.imageView=(ImageView)itemView.findViewById(R.id.image);
    }

}

এডাপটার

public class RecyclerView_Adapter extends RecyclerView.Adapter<RecyclerViewHolder> {

    //RecyclerView will extend to recayclerview Adapter
    private ArrayList<ModelClass> arrayList;
    private Context context;
    private static RecyclerViewClickListener itemListener;
    //constructor of the RecyclerView Adapter
    RecyclerView_Adapter(Context context,ArrayList<ModelClass> arrayList,RecyclerViewClickListener itemListener){
        this.context=context;
        this.arrayList=arrayList;
        this.itemListener=itemListener;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //this method will inflate the custom layout and return as viewHolder
        LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
        ViewGroup mainGroup=(ViewGroup) layoutInflater.inflate(R.layout.single_item,parent,false);
        RecyclerViewHolder listHolder=new RecyclerViewHolder(mainGroup);

        return listHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder holder, final int position) {

        final ModelClass modelClass=arrayList.get(position);
        //holder
        RecyclerViewHolder mainHolder=(RecyclerViewHolder)holder;
        //convert the drawable image into bitmap
        Bitmap image= BitmapFactory.decodeResource(context.getResources(),modelClass.getImage());
        //set the image into imageView
        mainHolder.imageView.setImageBitmap(image);
        //to handle on click event when clicked on the recyclerview item and
        // get it through the RecyclerViewHolder class we have defined the views there
        mainHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //get the position of the image which is clicked
             itemListener.recyclerViewListClicked(v,position);
            }
        });

    }

    @Override
    public int getItemCount() {
        return (null!=arrayList?arrayList.size():0);
    }
}

ইন্টারফেস

public interface RecyclerViewClickListener {

    //this is method to handle the event when clicked on the image in Recyclerview
    public void recyclerViewListClicked(View v,int position);
}

//and to call this method in activity
RecyclerView_Adapter adapter=new RecyclerView_Adapter(Wallpaper.this,arrayList,this);
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();


    @Override
    public void  recyclerViewListClicked(View v,int position){

        imageView.setImageResource(wallpaperImages[position]);

    }



বন্ধুরা আপনার প্রধান কার্যকলাপ এই কোড ব্যবহার করুন। অত্যন্ত কার্যকর পদ্ধতি

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.users_list);            
UsersAdapter adapter = new UsersAdapter(users, this);
recyclerView.setAdapter(adapter);
adapter.setOnCardClickListner(this);

এখানে আপনার অ্যাডাপ্টার ক্লাস হয়।

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UserViewHolder> {
        private ArrayList<User> mDataSet;
        OnCardClickListner onCardClickListner;


        public UsersAdapter(ArrayList<User> mDataSet) {
            this.mDataSet = mDataSet;
        }

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

        @Override
        public void onBindViewHolder(UserViewHolder holder, final int position) {
            holder.name_entry.setText(mDataSet.get(position).getUser_name());
            holder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onCardClickListner.OnCardClicked(v, position);
                }
            });
        }

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

        @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        }


        public static class UserViewHolder extends RecyclerView.ViewHolder {
            CardView cardView;
            TextView name_entry;

            public UserViewHolder(View itemView) {
                super(itemView);
                cardView = (CardView) itemView.findViewById(R.id.user_layout);
                name_entry = (TextView) itemView.findViewById(R.id.name_entry);
             }
        }

        public interface OnCardClickListner {
            void OnCardClicked(View view, int position);
        }

        public void setOnCardClickListner(OnCardClickListner onCardClickListner) {
            this.onCardClickListner = onCardClickListner;
        }
    }

এই পরে আপনি আপনার কার্যকলাপ এই override পদ্ধতি পাবেন।

@Override
    public void OnCardClicked(View view, int position) {
        Log.d("OnClick", "Card Position" + position);
    }



একটি বিকল্প সমাধান হল হুগো ভিসার , একটি Android GDE প্রস্তাবিত। আপনার কোডটি কেবলমাত্র ড্রপ করতে এবং এটি ব্যবহার করার জন্য তিনি একটি লাইসেন্স-মুক্ত শ্রেণি তৈরি করেছেন।

ব্যবহার:

ItemClickSupport.addTo(mRecyclerView)
        .setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
    @Override
    public void onItemClicked(RecyclerView recyclerView, int position, View v) {
        // do it
    }
});

(এটি দীর্ঘ আইটেম ক্লিক সমর্থন করে)

বাস্তবায়ন (আমার দ্বারা মন্তব্য যোগ করা হয়েছে):

public class ItemClickSupport {
    private final RecyclerView mRecyclerView;
    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;
    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mOnItemClickListener != null) {
                // ask the RecyclerView for the viewHolder of this view.
                // then use it to get the position for the adapter
                RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
                mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v);
            }
        }
    };
    private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if (mOnItemLongClickListener != null) {
                RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
                return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v);
            }
            return false;
        }
    };
    private RecyclerView.OnChildAttachStateChangeListener mAttachListener
            = new RecyclerView.OnChildAttachStateChangeListener() {
        @Override
        public void onChildViewAttachedToWindow(View view) {
            // every time a new child view is attached add click listeners to it
            if (mOnItemClickListener != null) {
                view.setOnClickListener(mOnClickListener);
            }
            if (mOnItemLongClickListener != null) {
                view.setOnLongClickListener(mOnLongClickListener);
            }
        }

        @Override
        public void onChildViewDetachedFromWindow(View view) {

        }
    };

    private ItemClickSupport(RecyclerView recyclerView) {
        mRecyclerView = recyclerView;
        // the ID must be declared in XML, used to avoid
        // replacing the ItemClickSupport without removing
        // the old one from the RecyclerView
        mRecyclerView.setTag(R.id.item_click_support, this);
        mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
    }

    public static ItemClickSupport addTo(RecyclerView view) {
        // if there's already an ItemClickSupport attached
        // to this RecyclerView do not replace it, use it
        ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
        if (support == null) {
            support = new ItemClickSupport(view);
        }
        return support;
    }

    public static ItemClickSupport removeFrom(RecyclerView view) {
        ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
        if (support != null) {
            support.detach(view);
        }
        return support;
    }

    public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) {
        mOnItemClickListener = listener;
        return this;
    }

    public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) {
        mOnItemLongClickListener = listener;
        return this;
    }

    private void detach(RecyclerView view) {
        view.removeOnChildAttachStateChangeListener(mAttachListener);
        view.setTag(R.id.item_click_support, null);
    }

    public interface OnItemClickListener {

        void onItemClicked(RecyclerView recyclerView, int position, View v);
    }

    public interface OnItemLongClickListener {

        boolean onItemLongClicked(RecyclerView recyclerView, int position, View v);
    }
}

এছাড়াও একটি ফাইল values/ids.xml তৈরি করুন এবং এতে এটি লিখুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="item_click_support" type="id" />
</resources>

এই ক্লাসটি RecyclerView.OnChildAttachStateChangeListener সংযুক্ত করে RecyclerView.OnChildAttachStateChangeListener সংযুক্ত করে কাজ করে। এই শ্রোতা প্রতিবার একটি শিশু সংযুক্ত করা হয় বা RecyclerView থেকে বিচ্ছিন্ন করা হয়। কোডটি দেখার জন্য একটি ট্যাপ / লম্বা ক্লিক শ্রোতা যুক্ত করতে এটি ব্যবহার করে। যে শ্রোতা RecyclerView জন্য RecyclerView জিজ্ঞাসা যা অবস্থান রয়েছে।

আপনি আরো প্রয়োজন হলে আপনি ধারক নিজেকে ফিরে দিতে কোডটি মানিয়ে নিতে পারে।

মনে রাখবেন যে এটি আপনার অ্যাডাপ্টারে পরিচালনা করার জন্য এটি সম্পূর্ণ সূক্ষ্ম, আপনার তালিকার প্রতিটি দৃশ্যকে প্রস্তাবিত অন্যান্য উত্তরগুলির মত একটি ক্লিক শ্রোতা সেট করে। এটি কেবল সবচেয়ে কার্যকরী কাজ নয় (আপনি যখন কোনও দৃশ্য পুনঃব্যবহার করেন তখন আপনি একটি নতুন শ্রোতা তৈরি করেন) তবে এটি কাজ করে এবং বেশিরভাগ ক্ষেত্রে এটি কোনও সমস্যা নয়।

RecyclerView নেই কেন সম্পর্কে।

RecyclerView হল একটি টুলবক্স, পুরানো তালিকা ListView বিপরীতে এতে বৈশিষ্ট্যগুলি কম বিল্ড এবং আরো নমনীয়তা রয়েছে। onItemClickListener ListView থেকে সরানো হচ্ছে একমাত্র বৈশিষ্ট্য নয়। কিন্তু এতে অনেক শ্রোতা এবং পদ্ধতি আপনার পছন্দসইতে প্রসারিত করতে পারে, এটি ডান হাতে অনেক বেশি শক্তিশালী।)।

আমার মতে, RecyclerView সরানো সবচেয়ে জটিল বৈশিষ্ট্য দ্রুত স্ক্রোল । অন্যান্য বৈশিষ্ট্য অধিকাংশ সহজেই পুনরায় বাস্তবায়িত করা যেতে পারে।




আমি এই ভাবে পছন্দ করি এবং আমি এটি ব্যবহার করছি

ভিতরে

public Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)

রাখুন

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_image_and_text, parent, false);
v.setOnClickListener(new MyOnClickListener());

এবং আপনি চান যেখানে এই বর্গ তৈরি

class MyOnClickListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
       int itemPosition = recyclerView.indexOfChild(v);
       Log.e("Clicked and Position is ",String.valueOf(itemPosition));
    }
}

আমি আগে একটি ভাল উপায় আছে যে পড়া আছে কিন্তু আমি এই ভাবে সহজ এবং জটিল নয় পছন্দ।




পুনর্ব্যবহারযোগ্য দৃশ্যটি নেই onItemClickListenerকারণ RecyclerView পুনঃব্যবহারযোগ্য দৃষ্টিভঙ্গি (অবাক!) এর জন্য দায়ী, তাই এটি এমন দৃশ্যের দায় যা এটি প্রাপ্ত ইভেন্টগুলির পরিচালনা করার জন্য পুনর্ব্যবহৃত হয়।

এটি আসলে এটি ব্যবহার করা অনেক সহজ করে তোলে, বিশেষত যদি আপনার কাছে আইটেমগুলি একাধিক স্থানে ক্লিক করা যেতে পারে।

যাইহোক, RecyclerView আইটেমটি ক্লিক করে সনাক্ত করা খুব সহজ। আপনাকে যা করতে হবে তা হল একটি ইন্টারফেস সংজ্ঞায়িত করা (যদি আপনি কোটলিন ব্যবহার করেন না, তবে কোন ক্ষেত্রে আপনি কেবল একটি Lambda এ পাস করেন):

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    private final Clicks clicks;

    public MyAdapter(Clicks clicks) {
        this.clicks = clicks;
    }

    private List<MyObject> items = Collections.emptyList();

    public void updateData(List<MyObject> items) {
        this.items = items;
        notifyDataSetChanged(); // TODO: use ListAdapter for diffing instead if you need animations
    }

    public interface Clicks {
        void onItemSelected(MyObject myObject, int position);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private MyObject myObject;    

        public MyViewHolder(View view) {
            super(view);
            // bind views
            view.setOnClickListener((v) -> {
                int adapterPosition = getAdapterPosition();
                if(adapterPosition >= 0) {
                    clicks.onItemSelected(myObject, adapterPosition);
                }
            });
        }

        public void bind(MyObject myObject) {
            this.myObject = myObject;
            // bind data to views
        }
    }
}

কোটলিনের একই কোড:

class MyAdapter(val itemClicks: (MyObject, Int) -> Unit): RecyclerView.Adapter<MyViewHolder>() {
    private var items: List<MyObject> = Collections.emptyList()

    fun updateData(items: List<MyObject>) {
        this.items = items
        notifyDataSetChanged() // TODO: use ListAdapter for diffing instead if you need animations
    }

    inner class MyViewHolder(val myView: View): RecyclerView.ViewHolder(myView) {
        private lateinit var myObject: MyObject

        init {
            // binds views
            myView.onClick {
                val adapterPosition = getAdapterPosition()
                if(adapterPosition >= 0) {
                    itemClicks.invoke(myObject, adapterPosition)
                }
            }
        }

        fun bind(myObject: MyObject) {
            this.myObject = myObject
            // bind data to views
        }
    }
}



আপনি যদি আইটেমগুলির সন্তানের দৃশ্যতে onClick () যুক্ত করতে চান, উদাহরণস্বরূপ, আইটেমের একটি বোতাম, আমি দেখেছি যে আপনি নিজেরাই RecyclerView.Adaptরের ক্রিয়েটিভ ভিউ হোল্ডার () এ সহজেই এটি করতে পারেন:

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater
                    .from(parent.getContext())
                    .inflate(R.layout.cell, null);

            Button btn = (Button) v.findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //do it
                }
            });

            return new MyViewHolder(v);
        }

আমি এটি একটি ভাল উপায় কিনা জানি না, কিন্তু এটি ভাল কাজ করে। কেউ যদি একটি ভাল ধারণা আছে, আমাকে বলতে এবং আমার উত্তর সংশোধন করতে খুব আনন্দিত! :)




আমার মন্তব্য সংশোধন করা হয়েছে ...

public class MyViewHolder extends RecyclerView.ViewHolder {

        private Context mContext;

        public MyViewHolder(View itemView) {
            super(itemView);

            mContext = itemView.getContext();

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    int itemPosition = getLayoutPosition();
                    Toast.makeText(mContext, "" + itemPosition, Toast.LENGTH_SHORT).show();

                }
            });
        }



আপনি একটি স্থানীয় সময় বিচ্ছিন্নতা সম্মুখীন হয়েছে:

যখন স্থানীয় মানক সময় রবিবার পৌঁছানোর কথা ছিল, 1 জানুয়ারি 19২8, 00:00:00 ঘড়ির পিছনে 0:05:52 ঘন্টা শনিবার, 31. ডিসেম্বর 1927, 23:54:08 পরিবর্তে স্থানীয় মান সময়

এটি বিশেষত অদ্ভুত নয় এবং এক সময় বা অন্য সময়ে একেবারে অনেক জায়গায় ঘটেছে যেমন টাইমজোনগুলি রাজনৈতিক বা প্রশাসনিক ক্রিয়াকলাপের কারণে পরিবর্তিত হয়েছে বা পরিবর্তিত হয়েছে।





java android android-recyclerview