রিসাইক্লারভিউ অন ক্লিক করুন


581

কেউ কি আইটেমগুলিতে RecyclerViewএকটি সেট করার উপায় খুঁজে পেয়েছে ? আমি প্রতিটি আইটেমের জন্য প্রতিটি বিন্যাসে শ্রোতা স্থাপনের কথা ভেবেছিলাম তবে এটিকে একটু বেশি ঝামেলা বলে মনে হচ্ছে আমি নিশ্চিত যে ইভেন্টটি শোনার জন্য একটি উপায় আছে তবে আমি এটি যথেষ্টভাবে বের করতে পারি না।onClickListenerRecyclerViewRecyclerViewonClick



4
রিসাইক্লারভিউডেমোটি আরও নিখরচায় ক্রিয়াকলাপ সরবরাহ করার জন্য ইন্টারফেস ব্যবহার করে আমি এই প্রকল্পটি দুর্দান্ত পেয়েছি।
মেওয়াএক্সএক্স

2
এই টিউটোরিয়ালটি দেখুন wiki.workassis.com/android-recyclerview- উদাহরণ
বিকাশ এম

সহজ এবং সহজেই ব্যবহারযোগ্য - github.com/rahulkapoor1/ClickableAdapter
রাহুল

stackoverflow.com/a/31199564/5788247
শমু

উত্তর:


477

যেহেতু এপিআই'র আমূল পরিবর্তন হয়েছে, আপনি যদি OnClickListenerপ্রতিটি আইটেমের জন্য একটি তৈরি করেন তবে তা আমাকে অবাক করে না । যদিও এটি কোনও ঝামেলা নয়। আপনার প্রয়োগে RecyclerView.Adapter<MyViewHolder>, আপনার উচিত:

private final OnClickListener mOnClickListener = new MyOnClickListener();

@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
    View view = LayoutInflater.from(mContext).inflate(R.layout.myview, parent, false);
    view.setOnClickListener(mOnClickListener);
    return new MyViewHolder(view);
}

onClickপদ্ধতি:

@Override
public void onClick(final View view) {
    int itemPosition = mRecyclerView.getChildLayoutPosition(view);
    String item = mList.get(itemPosition);
    Toast.makeText(mContext, item, Toast.LENGTH_LONG).show();
}

32
আমি যদি তার ক্লিকের উপর একটি সারি মুছতে চাই?
পীযূষ কুকদিয়া

20
আপনি যে উত্তরটি যুক্ত করেছেন তার চেয়ে এই উত্তরটি আমার পক্ষে ভাল। কে এটি পরিচালনা করতে ইঙ্গিত শ্রোতা এবং হিট বক্স সনাক্ত করতে লিখতে চায়। গুগল--
লো-টান

17
getChildPosition (দেখুন) অবচিত পদ্ধতি
জিগার

45
আপনার স্নিপেটগুলি কোন ক্লাসে রয়েছে তা বলতে আপনার আপত্তি আছে? onClick()সম্পর্কিত, OnClickListenerযে কোনও ভিউতে সংযুক্ত থাকতে পারে। এখানে পুরো প্রশ্নটি কোনটি! দয়া করে চেষ্টা করুন, একটি পদ্ধতি কেবল একটি নাম দ্বারা চিহ্নিত করা যায় না, তবে অন্তত কোনও শ্রেণি দ্বারাও চিহ্নিত করা হয়। যদি আপনি না বলেন যে আপনার কোডটি অ্যাডাপ্টারে যুক্ত করা হবে তবে আপনার উত্তরটি সত্যই সহায়তা করে না।
ভিনস

16
অনক্লিক পদ্ধতিটি কি সেই খণ্ডে থাকা উচিত যা রিসাইক্লারভিউ ধারণ করে? কারণ আপনি আপনার MyOnClickListener শ্রেণিতে mRecyclerView উল্লেখ করেছেন iew আপনি কোথায় এই বস্তুর রেফারেন্স পেয়েছেন?
সিড করুন

605

এটির জন্য বাস্তবায়নের OnClickListenerজন্য এখানে আরও ভাল এবং কম শক্তভাবে যুগল উপায় RecyclerView

ব্যবহারের স্নিপেট:

RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
      @Override public void onItemClick(View view, int position) {
        // do whatever
      }

      @Override public void onLongItemClick(View view, int position) {
        // do whatever
      }
    })
);

RecyclerItemClickListener বাস্তবায়ন:

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

    public void onLongItemClick(View view, int position);
  }

  GestureDetector mGestureDetector;

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

        @Override
        public void onLongPress(MotionEvent e) {
            View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
            if (child != null && mListener != null) {
                mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
            }
        }
    });
}

  @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 true;
    }
    return false;
  }

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

  @Override
  public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
}

85
কোন বাটন বা ভিউ (আইটেমের মধ্যে) ক্লিক করা হয়েছিল সে সম্পর্কে এটি কোনও ক্লু সরবরাহ করবে না। তবে সামগ্রিক আইটেম ক্লিকের জন্য, এটি ঠিক আছে।
নিরঞ্জন

27
এনজেঞ্জের মন্তব্যটি সঠিক - আপনি যদি আইটেম ভিউয়ের মধ্যে একটি নির্দিষ্ট আইটেমটিতে অনক্লিক শ্রোতাদের সংযুক্ত করতে চান তবে আপনার সম্ভবত এটি করা উচিত আপনার অ্যাডাপ্টারে, অনবিন্দ ভিহোল্ডার বা আপনার ভিউহোল্ডার নিজেই।
জ্যাকব তাবাক

16
এই পদ্ধতির সাথে একটি সমস্যা হ'ল আপনি যখন এমন কিছু করছেন যা কোনও কার্যকলাপ শুরু করার মতো কয়েক শ মিলসেকেন্ড লাগে। আইটেমটি ক্লিক করা হয় এবং এটিতে ক্লিক করা অ্যানিমেশন থাকে যখন অ্যানিমেশনটি ক্লিক করা এবং দেখার মধ্যে একটি লক্ষণীয় বিলম্ব হয়।
গাক 2

20
এই সমাধানটি চূড়ান্তভাবে অনুভব করে, 'ক্লিক' প্রক্রিয়া করার সময় কিছুটা বিলম্ব হয় এবং অনুভূতিটি ঠিক ঠিক হয় না
wasyl

6
কেউ কি আমাকে ব্যাখ্যা করতে পারেন যে কেন গেসচারডেেক্টর সহ এই সমাধানটি সেই উপাদানটির সাথে অ্যাডাপ্টারে অনবিন্দ ভিহোল্ডার () এর ভিতরে "সেটঅনক্লিকলিস্টার" ব্যবহার করার চেয়ে আরও ভাল সমাধান বলে মনে করা হচ্ছে? GestureDetector সমাধানের চেয়ে কমপক্ষে আমার কম কোড দরকার। একটি ব্যাখ্যা জন্য ধন্যবাদ।
ই-প্রকৃতি

115

আমি এটি অযথা ক্লাস, ডিটেক্টর ইত্যাদি ছাড়াই এইভাবে করি আমাদের অ্যাডাপ্টারের অভ্যন্তরে সাধারণ কোড। পূর্বে উপস্থাপনার চেয়ে লং ক্লিকের জন্য বিশেষত আরও ভাল সমাধান।

public class PasswordAdapter extends RecyclerView.Adapter<PasswordAdapter.ViewHolder> {
    private static ClickListener clickListener;

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        TextView name;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
            name = (TextView) itemView.findViewById(R.id.card_name);
        }

        @Override
        public void onClick(View v) {
            clickListener.onItemClick(getAdapterPosition(), v);
        }

        @Override
        public boolean onLongClick(View v) {
            clickListener.onItemLongClick(getAdapterPosition(), v);
            return false;
        }
    }

    public void setOnItemClickListener(ClickListener clickListener) {
        PasswordAdapter.clickListener = clickListener;
    }

    public interface ClickListener {
        void onItemClick(int position, View v);
        void onItemLongClick(int position, View v);
    }
}

তারপরে খণ্ড বা ক্রিয়াকলাপের ভিতরে কেবল আঘাত করুন:

PasswordAdapter mAdapter = ...;

mAdapter.setOnItemClickListener(new PasswordAdapter.ClickListener() {
    @Override
    public void onItemClick(int position, View v) {
        Log.d(TAG, "onItemClick position: " + position);
    }

    @Override
    public void onItemLongClick(int position, View v) {
        Log.d(TAG, "onItemLongClick pos = " + position);
    }
});

আওয়ারএডাপ্টার.ক্লিকলিস্টনার পরিবর্তে আমি মনে করি মারুরবান মানে পাসওয়ার্ডআডাপ্টার.ক্লিকলিস্টনার এবং ট্রেনিংএডাপ্টার.ক্লিকলিস্টার () এর পরিবর্তে পাসওয়ার্ডএডাপ্টার.ক্লিকলিস্টার () হওয়া উচিত। তা ছাড়া মারুরবান দুর্দান্ত সমাধান! আমার জন্য কাজ করেছেন
নমিনিয়ার

অন ​​আইটেমিক্লিক শ্রোতা দীর্ঘ ক্লিকে সক্রিয় করা হচ্ছে।
রাশাদ.জেড

10
সেরা পারফরম্যান্সের জন্য ভিউহোল্ডার অবশ্যই স্থির থাকতে হবে। এটি একটি ভাল উত্তর নয়।
গিলবার্তো ইবাররা

10
স্ট্যাটিক ক্লিকলিস্টেনার একটি মেমরি ফাঁস তৈরি করে। শ্রোতাকে অ স্থির হিসাবে ঘোষণা করুন এবং এর পরিবর্তে ভিউহোল্ডারের সাথে আবদ্ধ করুন।
ব্লেডকডার

1
@ এজেডাব্লু এর সহজ উপায় হ'ল শ্রোতাদের তাড়াতাড়ি আরম্ভ করা এবং অ্যাডাপ্টার কনস্ট্রাক্টর এবং তারপরে ভিউহোল্ডার কনস্ট্রাক্টরের কাছে যুক্তি হিসাবে এটি প্রেরণ করা।
ব্লেডকডার

97

একটি অনুরূপ পরীক্ষা করে দেখুন প্রশ্ন @ CommonsWare এর মন্তব্য সংযোগগুলি এই , যা প্রয়োগ OnClickListenerইন্টারফেস viewHolder

এর একটি সাধারণ উদাহরণ এখানে ViewHolder:

    TextView textView;//declare global with in adapter class

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

      private ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            textView = (TextView)view.findViewById(android.R.id.text1);

      }

      @Override
      public void onClick(View view) {
            Toast.makeText(view.getContext(), "position = " + getLayoutPosition(), Toast.LENGTH_SHORT).show();

         //go through each item if you have few items within recycler view
        if(getLayoutPosition()==0){
           //Do whatever you want here

        }else if(getLayoutPosition()==1){ 
           //Do whatever you want here         

        }else if(getLayoutPosition()==2){

        }else if(getLayoutPosition()==3){

        }else if(getLayoutPosition()==4){

        }else if(getLayoutPosition()==5){

        }

        //or you can use For loop if you have long list of items. Use its length or size of the list as 
        for(int i = 0; i<exampleList.size(); i++){

        }


      }
  }

Adapterতারপর এই মত দেখায়:

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

        return new ViewHolder(view);
    }

14
যদিও এটি ভুল পথে চলেছে বলে মনে হচ্ছে। আপনার যদি অন্য একটি খণ্ড / ক্রিয়াকলাপে পুনর্ব্যবহারযোগ্য পুনরায় ব্যবহারের প্রয়োজন হয় তবে অ্যাডাপ্টার / ভিউহোল্ডার এখন ক্লিকগুলির যুক্তি সংজ্ঞা দিচ্ছে যা এতে রয়েছে তার পরিবর্তে। ক্লিকগুলি প্রকৃতপক্ষে প্রত্যক্ষ বা অপ্রত্যক্ষভাবে ধারণকৃত উদাহরণ দ্বারা পরিচালনা করা উচিত। মনে হয় কোনও স্পর্শ শ্রোতা এটি সম্পর্কে একমাত্র কার্যকর উপায়।
ian.shaun.thomas

18
টুইটটি আমি কীভাবে সমস্যা তা দেখছি না। ভিউহোল্ডার নিজেই যখন উপাদানটি ক্লিক করা হয় তখন কোন তথ্য নির্বাচন করা হয় সে সম্পর্কিত সমস্ত তথ্য থাকে, তবে ধারকটির একমাত্র দায়িত্ব হ'ল নির্দিষ্ট আই-তম উপাদানটির নির্বাচন পরিচালনা করার পরিবর্তে এন উপাদানগুলির প্রদর্শন is এন উপাদানগুলির। ListViewযদি আপনি শুধু সহজ সারি চেয়েও বেশি জটিল বস্তুর একটি তালিকা তৈরি করতে ছিল ইতিমধ্যে সমস্যাযুক্ত ছিল। আপনি যদি তালিকাভিউতে আইটেমটি ক্লিক করেন তার উপর নির্ভর করে বিভিন্ন ইভেন্ট হ্যান্ডেল করার দরকার হয় তবে কী হবে? আপনি মাতাল. এখানে আপনার প্রতিটি শ্রোতা রয়েছে।
এপিকপান্ডাফোরস

2
আমি এই সম্পর্কে @ ইপিকপান্ডা ফোরসের সাথে একমত। আমি রিসাইক্লার ভিউজে ক্লিকগুলি পরিচালনা করার বিষয়ে কমন্সওয়্যারের বইয়ের বিভাগটি পড়ার পরেও এই উত্তরটি উজ্জ্বল করতে এসেছি এটি এখনও আমার পক্ষে দুর্দান্ত কাজ করেছে।
অ্যাডামএমসি 331

1
ফাইন্ডভিউআইআইডি কেবলমাত্র এখানে ধারণকর্তা তৈরির জন্য ব্যবহৃত হচ্ছে (অতএব অনক্রিটভিউহোল্ডার)। দেখার ধারকটির উদ্দেশ্য প্রতিবার কোনও আইটেম ধারককে আবদ্ধ করার সময় দেখার সন্ধান করা রোধ করার উদ্দেশ্যে করা হয়, প্রাথমিক তৈরিতে নয়।
আটল

2
getPosition()অবচয়, ব্যবহার getAdapterPosition()বা getLayoutPosition()পরিবর্তে হয়।
কে নীরাজ লাল

94

জ্যাকব তাবাকের জবাব (তার জন্য +1) এর ভিত্তিতে, আমি লং ক্লিক শ্রোতাদের যোগ করতে সক্ষম হয়েছি:

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 {
    public interface OnItemClickListener {
        void onItemClick(View view, int position);

        void onItemLongClick(View view, int position);
    }

    private OnItemClickListener mListener;

    private GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
        mListener = listener;

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

            @Override
            public void onLongPress(MotionEvent e) {
                View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());

                if (childView != null && mListener != null) {
                    mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView));
                }
            }
        });
    }

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

তারপরে আপনি এটি ব্যবহার করতে পারেন:

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), recyclerView, new RecyclerItemClickListener.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        // ...
    }

    @Override
    public void onItemLongClick(View view, int position) {
        // ...
    }
}));

1
আমার অ্যাপ্লিকেশনটির সাথে খাপ খাইয়ে নিতে এবং জাভা / অ্যান্ড্রয়েড স্ট্যান্ডার্ডগুলিতে কোডটি প্রান্তিককরণ এবং ফর্ম্যাট করার জন্য আমাকে কিছুক্ষণ সময় নিয়েছে, তবে শেষ পর্যন্ত এটি দুর্দান্ত কাজ করেছে।
milosmns

দীর্ঘ ক্লিকের জন্য আপনি কীভাবে একটি অ্যানিমেশন যুক্ত করবেন?
জন

1
@ ইঞ্জি। ফুয়েড ক্লিক এফেক্টটি এটি ব্যবহার করে কাজ করছে না, যদিও আমরা অ্যাডাপ্টারে ক্লিক শ্রোতাদের সেট করে দিলে ক্লিক এফেক্ট এর কোনও সমাধান কাজ করে
ইনসৌরভ

4
আপনার ওভাররাইড করা উচিতpublic void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
পাওলো রোটোলো

কিছু কারণে এটি ক্লিক করা দর্শন ফিরিয়ে দেয় না। আমার ক্ষেত্রে আমি একটি চেকবক্সে ক্লিক করি তবে প্রদত্ত দর্শনটি আলাদা। যেভাবে আমি চেক করব:view.getId() == R.id.selection
ডিভ্যাফিকেশন

63

এটিই আমার পক্ষে কাজ করেছিল। সংযুক্ত করুন OnClickListenerথেকে onBindView। এটি কার্যকারিতাটিতে প্রভাব ফেলবে কিনা তা আমি সত্যিই জানি না, তবে মনে হচ্ছে এটি সামান্য কোডের সাথে খুব ভাল কাজ করে।

public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "Recycle Click" + position, Toast.LENGTH_SHORT).show();
            }
    });
}

5
আমার ক্ষেত্রে ধারক.ইটিএমভিউ.সেটঅনক্লিকলিস্টার (..)
D4rWiNS

18
আমার ক্ষেত্রে এটি 'ভিউ'র পরিবর্তে' আইটেম ভিউ 'নামকরণ করা হয়েছে, কেবল নতুনদের জন্য বলছি, তাদের মধ্যে কেউ কেউ বুঝতে পারেন না তারা কী অনুলিপি করছেন এবং কেন কাজ করেন না তা বুঝতে পারেন না
D4rWiNS

3
এটির বিন্যাসের অবস্থান
বুবুনিও প্রিয়ভার

1
আমার কাছে এটি কেবল
ক্লিকযোগ্য

2
এই সমাধানটি আমার কাছে সেরা বলে মনে হচ্ছে, তবে পারফরম্যান্সের থার্মগুলিতে এটি কীভাবে @ বোলটের উত্তর থেকে আলাদা? তিনি ভিউঅনিক্লিকলিস্টনার সরাসরি ভিউহোল্ডার শ্রেণিতে প্রয়োগ করেছেন, যা অনক্লিক পদ্ধতিটি আলাদাভাবে ছড়িয়ে দেয়। কোনটি সেরা সমাধান হতে পারে?
এডমন্ড তমাস

46

ক্রিয়াকলাপে আইটেম ক্লিক শ্রোতাদের কাছে রাখা এবং আইটেম ক্লিক শ্রোতাদের উপর ট্রিগার না করে আইটেমটির একক দেখার জন্য ক্লিক শ্রোতাদের কাছে রাখা আমার পক্ষে এত কঠিন ছিল। জ্যাকব তাবাকের উত্তরটি নিয়ে খেলা করার পরে আমি আইটেম ক্লিকের জন্য তার উত্তরটির প্রতি শ্রদ্ধা জানাই যদি আইটেমের অভ্যন্তরে অন্য কোনও স্পর্শ ক্রিয়া উপস্থাপন না করা হয়।

আমার OnClickListenerআইটেম ক্লিক ইভেন্টে একটি কাস্টম ইন্টারফেস রয়েছে যা এডাপ্টার থেকে ক্লিক করা আইটেমের ভিউ এবং আইটেমের অবস্থান ধারণ করে। আমি এটির কনস্ট্রাক্টর (বা এটি সেটারের সাথে থাকতে পারে) এর একটি উদাহরণ উপস্থাপন করি এবং এটি ধারণক ধারক ক্লিক শ্রোতার সাথে সংযুক্ত করি।

আমার কাছে অ্যাডাপ্টারে অন্যান্য ক্লিক শ্রোতাও রয়েছে (ভিউ ধারকটিতে থাকতে পারে) যা ধারক থেকে বর্তমান ভিউ ক্লিকটি পরিচালনা করবে।

 public class MyRecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {

private ArrayList<String> mData;
private OnItemClickListener mOnItemClickListener;

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

public MyRecyclerAdapter(ArrayList<String> itemsData,
        OnItemClickListener onItemClickListener) {
    mOnItemClickListener = onItemClickListener;
    this.mData = itemsData;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,
        int viewType) {

    View layoutView = LayoutInflater.from(mContext).inflate(
            R.layout.list_item, parent, false);

    final MyViewHolder viewHolder = new MyViewHolder(layoutView);

    viewHolder.container.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mOnItemClickListener.onItemClick(v, viewHolder.getAdapterPosition());
        }
    });

    viewHоlder.button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //do button click work here with
            // mData.get( viewHolder.getAdapterPosition() );
        }
    });

    return viewHolder;
}

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

ক্রিয়াকলাপে আপনাকে অ্যাডাপ্টারটি আরম্ভ করতে হবে এর উদাহরণটি পাস করে OnItemClickListener

public class FeedActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

    .....

    MyRecyclerAdapter adapter = new MyRecyclerAdapter(new ArrayList<String>(), new OnItemClickListener() {

        @Override
        public void onItemClick(View view, int position) {

            ///list item was clicked
        }
    });

    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(mFeedsAdapter);
}

এবং আমার ভিউহোল্ডার

public class MyViewHolder extends RecyclerView.ViewHolder {

public Button button;
public View container;

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

    container = itemLayoutView;
    button = (Button) itemLayoutView.findViewById(R.id.button);
}}

এই পদ্ধতিরটি আমার পক্ষে ভালভাবে কাজ করেছে - এর অর্থ আপনি গ্রিড ভিউয়ের পরিবর্তে ক্রিয়াকলাপগুলিতে ক্লিকগুলি পরিচালনা করতে পারবেন
লিফকাটার

3
আমি তোমাকে কোথায় টাকা দিতে পারি? 4 ঘন্টা অনুসন্ধান এবং তারপরে আমি আপনার পোস্টটি পড়ি। আপনি এটি পোস্ট করার সময়টির জন্য ধন্যবাদ।
ব্র্যান্ডন

3
এটি মূ ?় মনে হলেও, এটির মতো সমস্যার মতো কোনও স্মৃতি বা দক্ষতা আছে কি? যেহেতু আমরা প্রতিবারের মতো দেখার জন্য ক্লিক করা শ্রোতার দায়িত্ব নিযুক্ত করছি?
rgv

1
@ রাঘব হ্যাঁ প্রতিবারের মতামতটি যখন আবদ্ধ করা হচ্ছে তখন একটি নতুন ক্লিক শ্রোতা নিয়োগ করা হয়েছে, তবে এটি স্ট্যান্ডার্ড প্রবাহ flow তবে mOnItemClickListener শুধুমাত্র একবার অ্যাডাপ্টারের জন্য তৈরি করা হবে কেবল প্রতিটি ভিউতে ক্লিক এবং তার অবস্থান পৃথক;)
স্যার নিকলে সিজার দ্য ফার্স্ট

3
অ্যাপের কার্য সম্পাদন এবং মেমরির অতিরিক্ত ব্যবহার তৈরির দুর্দান্ত উদাহরণ! এই উদাহরণের সাহায্যে আপনার কয়েকশ অযথা অবজেক্ট তৈরি করতে আপনার কেবল স্ক্রোল প্রয়োজন, যা এক মুহুর্তে অকেজো হয়ে যায় এবং গার্জেজ হিসাবে অ্যাক্সেস করতে হবে। @ নুবডগ ঠিক আছে। অনবিন্দ ভিউতে কোনও ক্লিকলিস্টার তৈরি করতে হবে না। অনক্রিয়েটভিউতে (বা ধারক নির্মাণকারী) একবার ক্লিক শ্রোতাদের তৈরি করতে হবে এবং আমাদের যখন এই অ্যাডাপ্টারের সাথে স্ক্রিন প্রয়োজন তখন উপস্থিত রয়েছে।
মাইকোলা টিচাইনা

35

এটিই আমার প্রয়োজন হিসাবে শেষ হয়েছিল, যদি কেউ এটির কাজে লাগে:

public static class ViewHolder extends RecyclerView.ViewHolder {

    public ViewHolder(View item) {

        super(item);
        item.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("RecyclerView", "onClick:" + getAdapterPosition());
            }
        });

    }
}

সূত্র: http://blog.csdn.net/jwzhangjie/article/details/36868515


আমি যে সমস্ত সংস্করণ চেষ্টা করেছি তার মধ্যে এটিই আমি কাজ করেছি। তবে কি ঠিক আছে, এটি সেভাবে করা? বা সেরা অনুশীলনের মতো আরও ভাল উপায় কি আছে?
ম্যাথিয়াস লোইবল

1
আমি যতদূর বলতে পারি, এটি ছিল একমাত্র উপায়। আরও বিশদ জন্য এই পরীক্ষা করে দেখুন! stackoverflow.com/a/24933117/1508887
ফাইফর শেপ

অনক্লিক পদ্ধতিতে আমি কীভাবে নতুন খণ্ড খুলতে পারি?
হ্যাশ

4
getAdapterPosition () getPosition () কে প্রতিস্থাপন করেছে
কেনেডি

27

আমি সুন্দর সমাধান আছে RecyclerViewএর onItemClickListenerআইটেম এবং subitems জন্য

পদক্ষেপ 1- একটি ইন্টারফেস তৈরি করুন

public interface OnRecyclerViewItemClickListener
{
    /**
     * Called when any item with in recyclerview or any item with in item
     * clicked
     * 
     * @param position
     *            The position of the item
     * @param id
     *            The id of the view which is clicked with in the item or
     *            -1 if the item itself clicked
     */
    public void onRecyclerViewItemClicked(int position, int id);
}

পদক্ষেপ 2- তারপরে এটি অ্যাডাপ্টারের onBindViewHolderপদ্ধতিতে নিম্নলিখিত উপায়ে ব্যবহার করুন

/**
     * Custom created method for Setting the item click listener for the items and items with in items
     * @param listener OnRecyclerViewItemClickListener 
     */
    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener)
    {
        this.listener = listener;
    }

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

        // viewHolder.albumBg.setBackgroundResource(_itemData[position]
        // .getImageUrl());

        viewHolder.albumName.setText(arrayList.get(position).getName());
        viewHolder.artistName.setText(arrayList.get(position).getArtistName());
        String imgUrl = arrayList.get(position).getThumbImageUrl();

        makeImageRequest(imgUrl, viewHolder);
        viewHolder.parentView.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                listener.onRecyclerViewItemClicked(position, -1);
            }
        });
        viewHolder.settingButton.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                listener.onRecyclerViewItemClicked(position, v.getId());
            }
        });

    }

    // class to hold a reference to each item of RecyclerView
    public static class ViewHolder extends RecyclerView.ViewHolder
    {

        public TextView albumName, artistName;
        public ImageView albumIcon, settingButton;
        public LinearLayout parentView;

        public ViewHolder(View itemLayoutView)
        {
            super(itemLayoutView);
            // albumBg = (LinearLayout) itemLayoutView
            // .findViewById(R.id.albumDlbg);
            albumName = (TextView) itemLayoutView.findViewById(R.id.albumName);
            artistName = (TextView) itemLayoutView
                    .findViewById(R.id.artistName);
            albumIcon = (ImageView) itemLayoutView.findViewById(R.id.albumIcon);
            parentView = (LinearLayout) itemLayoutView
                    .findViewById(R.id.albumDlbg);
            settingButton = (ImageView) itemLayoutView
                    .findViewById(R.id.settingBtn);
        }

    }

পদক্ষেপ 3- আপনি যেখানে এটি ব্যবহার করছেন এমন ক্রিয়াকলাপ বা খণ্ডে রিসাইক্লার ভিউ সন্ধান এবং সেটআপ করুন

recyclerView = (RecyclerView) rootview.findViewById(R.id.vmtopsongs);

        lm = new LinearLayoutManager(mActivity);
        lm.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(lm);
        recyclerView.addItemDecoration(
                new HorizontalDividerItemDecoration.Builder(getActivity())
                        .paint(Utils.getPaint()).build());
        PopularSongsadapter mAdapter = new PopularSongsadapter(gallery,
                mActivity, true);
        // set adapter
        recyclerView.setAdapter(mAdapter);
        mAdapter.setOnItemClickListener(this);
        // set item animator to DefaultAnimator
        recyclerView.setItemAnimator(new DefaultItemAnimator());

পদক্ষেপ 4- অবশেষে ক্রিয়াকলাপ বা খণ্ডে ইন্টারফেসটি প্রয়োগ করুন যেখানে আপনি পুনর্ব্যবহার করছেন

@Override
    public void onRecyclerViewItemClicked(int position, int id)
    {
        if(id==-1){
            Toast.makeText(mActivity, "complete item clicked", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(mActivity, "setting button clicked", Toast.LENGTH_LONG).show();
        }
    }

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

উপ-আইটেমগুলি থেকে সারি / আইটেমটি আলাদা করার জন্য এটি একটি সহজ সহজ পদ্ধতি
নাইজেল সেভেজ

17

এখানে আমি কি করেছি। এই সমাধানটি রিসাইক্লারউভ আইটেম এবং ভিউ উভয়ের অভ্যন্তরে পুনর্ব্যবহারযোগ্য আইটেমগুলিতে (অভ্যন্তরীণ ভিউ) অনক্লিক এবং অনলঙ্ক উভয়ই সমর্থন করে।

আমি আমার পছন্দ মতামত ভিউহোল্ডার ট্যাগ:

public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item, null);
    ViewHolder viewHolder = new ViewHolder(itemView);

    itemView.setOnClickListener( this);
    itemView.setOnLongClickListener(this);
    viewHolder.imageIV.setOnClickListener(this);
    viewHolder.imageIV.setOnLongClickListener(this);

    viewHolder.imageIV.setTag(viewHolder);
    itemView.setTag(viewHolder);

    return viewHolder;
}

এবং আমি অন ক্লিক () পদ্ধতিতে (অনলংকলিক অনুরূপ) অবস্থান পুনরুদ্ধার করতে ধারক.সেটপজিশন () ব্যবহার করি:

public void onClick(View view) {
    ViewHolder holder = (ViewHolder) view.getTag();
    int position = holder.getPosition();

    if (view.getId() == holder.imageIV.getId()){
        Toast.makeText(context, "imageIV onClick at" + position, Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(context, "RecyclerView Item onClick at " + position, Toast.LENGTH_SHORT).show();
    }
}

GetChildPosition সহ একটি বৈকল্পিকও কাজ করে works অনুগ্রহ করে নোট করুন অভ্যন্তরীণ দর্শনগুলির জন্য, অনক্লিক () ব্যবহারে:

int position = recyclerView.getChildPosition((View)view.getParent());

আমার মতে, এই সমাধানটির সুবিধাটি হ'ল যখন চিত্রটিতে একটি ক্লিক করা হয়, কেবল তখনই অনক্লিক () চিত্র শ্রোতাকে ডেকে আনা হয় যখন আমি যখন একটি পুনর্ব্যবহারযোগ্য আইটেম দর্শন এবং আমার অভ্যন্তরীণ দর্শনগুলির জন্য আমার সমাধানটি পুনর্ব্যবহারযোগ্য আইটেম দর্শন অনক্লিক () ) বলা হয় (যখন ছবিতে ক্লিক করা হয়)।


11

এটি করার আরও অনেক সহজ উপায় আছে। শুধু ক্লিক ইন প্রয়োগ করুনonBindViewHolderরুট ভিউতে ।

অ্যাডাপ্টারের জন্য এটি আপনার দৃষ্টিভঙ্গি বিবেচনা করুন,

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/linearlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

        <TextView
            android:id="@+id/textview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1dp"
            android:textSize="15sp" />
</LinearLayout>

তারপরে আপনার অ্যাডাপ্টারে অনুসরণ করুন

//get the layout and make view holder
@Override
public RVAdapter.ViewHolder1 onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_layout, null);
    ViewHolder1 viewHolder = new ViewHolder1(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(RVAdapter.ViewHolder1 holder, int position) {

    //apply on click on your root view
    holder.linearlayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Do on click stuff
        }
    });
}

//make references to views in layout including root view
public class ViewHolder1 extends RecyclerView.ViewHolder {

    protected LinearLayout linearlayout = null
    protected TextView textview = null;

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

        this.linearlayout = (LinearLayout) itemView.findViewById(R.id.linearlayout);
        this.tvCompName = (TextView) itemView.findViewById(R.id.textview);
    }
}

9

আপনি একটি পাস করতে পারেন clickListenerথেকেAdapter

আপনার Activity:

private View.OnClickListener mItemClick = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = null;
        int position = list.getChildPosition(v);
        switch (position) {
            case 0:
                intent = new Intent(MainActivity.this, LeakCanaryActivity.class);
                break;
            case 1:
                intent = new Intent(MainActivity.this, ButterKnifeFragmentActivity.class);
                break;
        }
        if (intent != null) {
            MainActivity.this.startActivity(intent);
        }
    }
};

তারপরে এটি পাস করুন Adapter:

MainAdapter mainAdapter = new MainAdapter(this, mItemClick);

ইন Adapterএর onCreateViewHolder:

 @Override
public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
    View itemView = activity.getLayoutInflater().inflate(R.layout.main_adapter_item, viewGroup, false);
    ViewHolder holder = new ViewHolder(itemView);
    itemView.setOnClickListener(mItemClick);
    return holder;
}

আপনি কীভাবে holderমানগুলির মধ্য দিয়ে পাস করবেন ?
রোক রক

8

আমি অ্যান্ড্রয়েডের জন্য একটি হালকা ওজনযুক্ত গ্রন্থাগার তৈরি করেছি, আপনি দেখতে পারেন 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
            }
        });

নিশ্চিত করতে পারেন, এই গ্রন্থাগারটি দুর্দান্ত! ব্যবহার করা খুব সহজ, ভাল কাজ!
পিটারকোডার্মাক

7

আপনি নিজের ভিউহোল্ডার শ্রেণিতে অনক্লিকলিস্টনার প্রয়োগ করতে পারেন

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public Item item
        @InjectView(R.id.tv_title)
        public TextView tvTitle;
        @InjectView(R.id.rl_row)
        public RelativeLayout rlRow;

        public ViewHolder(View v) {
            super(v);
            ButterKnife.inject(this, v);
            v.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            Log.e("item title",item.getTitle());
        }
    }

এবং অনবিন্দ ভিউহোল্ডার আপনার দর্শনধারীর আইটেমটি সেট করে

public void onBindViewHolder(ViewHolder holder, int position) {
        holder.tvTitle.setText(objects.get(position).getTitle());
        holder.item = objects.get(position);
        }

7

উপায় খুব সহজ এবং কার্যকর।

View.OnClickListenerআপনার ক্রিয়াকলাপে ভিউ হোল্ডারের ভিতরে ইন্টারফেস প্রয়োগ বা ইন্টারফেস এবং প্রয়োগকরণের পরিবর্তে - আমি কার্যকরভাবে 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();
        }
    }

3
এটি একটি সাধারণ খারাপ অনুশীলন কারণ এটি দেখতে খুব সহজ দেখায়। প্রতিবার কোনও বস্তুকে বেঁধে রাখার সময় আপনি একটি নতুন অভ্যন্তরীণ শ্রোতা তৈরি করছেন (এবং একটি পুনর্ব্যক্তাকারীর প্রতিটি আইটেম অনেকবার আবদ্ধ হতে পারে) যা ক) পারফরম্যান্সের জন্য খারাপ) খ) আবর্জনা সংগ্রহ। পরিবর্তে আপনার কোথাও এক শ্রোতা তৈরি করা উচিত (ভিউহোল্ডারে, অ্যাডাপ্টারে, উপরের অংশে বা ক্রিয়াকলাপে) এবং কেবলমাত্র এটির ভিউহোল্ডারটিতে ভিউহোল্ডার কনস্ট্রাক্টরের আইটেমগুলিতে যুক্ত করুন। এটিতে কোন আইটেম ক্লিককারী ছিল তা নির্ধারণের অতিরিক্ত জটিলতা রয়েছে তবে ট্যাগগুলির মাধ্যমে বা ধারককে আরও তথ্য যুক্ত করার মাধ্যমে সহজেই সমাধান করা যায়।
গিলারমো

6

এখনও অবধি পোস্ট করা সমস্ত উত্তর দুর্দান্ত সমাধান, তবে আপনি যদি খুব বেশি বাস্তবায়নের বিশদটি মোকাবেলা করতে না চান এবং কেবল তালিকাভিউ কীভাবে এটির মতো কাজ করতে চান তবে আমি এখানে যেমন টুওয়ে-ভিউ ব্যবহারের পরামর্শ দেব:

https://github.com/lucasr/twoway-view

নোট করুন যে এই বাস্তবায়ন আইটেমগুলিতে দীর্ঘ প্রেসের পাশাপাশি চাপযুক্ত রাজ্যগুলির পক্ষেও সহায়তা করে (যা এই প্রশ্নের অভাবের অন্যান্য সমাধানগুলির গুরুত্বপূর্ণ সমাধান)।

আপনি যদি পুরো লাইব্রেরিটি ব্যবহার করতে না চান তবে ক্লিক আইটেমটিচলিস্টেনার ক্লাসটি একবার দেখুন, যা প্রয়োজনে স্ট্যান্ড স্টোন হিসাবে ব্যবহার করা যেতে পারে। এই মুহুর্তে এটির সাথে আমি খুঁজে পেয়েছি এমন একমাত্র সমস্যা দীর্ঘ প্রেস + স্ক্রোলিং সহ, এটির মতো আচরণ ভুল বলে মনে হচ্ছে।


6

আপনি ধরা ক্লিক ঘটনা নির্দিষ্ট আইটেমগুলি উপর করতে চান, তারপর বাস্তবায়ন OnClickListenerমধ্যে ViewHolderবর্গ এবং তারপর পৃথক মতামত অথবা পুরো ক্লিক করুন শ্রোতাকে সেট itemView

নিম্নলিখিত উদাহরণ একই দেখায়

public  class ContactViewHolder extends RecyclerView.ViewHolder implements OnClickListener
    {
        TextView txt_title,txt_name,txt_email;

        public ContactViewHolder(View itemView) 
        {
            super(itemView);
            txt_title = (TextView)itemView.findViewById(R.id.txt_title);
            txt_name  = (TextView)itemView.findViewById(R.id.txt_name);
            txt_email = (TextView)itemView.findViewById(R.id.txt_email);

            txt_name.setOnClickListener(this);
            txt_email.setOnClickListener(this);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(v == itemView)
            {
                Toast.makeText(RecyclerDemoActivity.this, "Visiting Card Clicked is ==>"+txt_name.getText(), Toast.LENGTH_SHORT).show();
            }

            if(v == txt_name)
            {
                Toast.makeText(RecyclerDemoActivity.this, "Name ==>"+txt_name.getText(), Toast.LENGTH_SHORT).show();
            }

            if(v == txt_email)
            {
                Toast.makeText(RecyclerDemoActivity.this, "Email ==>"+txt_email.getText(), Toast.LENGTH_SHORT).show();
            }
        }

    }
} 

5

আমার জন্য, এটি সর্বোত্তম উপায়:

class YourRecyclerAdapter extends RecyclerView.Adapter<ContactViewHolder> implements View.OnClickListener { 
  ...
  @Override
  public void onClick(View view) {
        int itemPosition = vRecycle.getChildPosition(view);
        //And use itemPosition to get the item from your collection. This way you dont restrain the ViewHolder with a OnClick callback
    }
  ...
}

3
getChildPosition () কেটে ফেলা হয়েছে
সিনিয়র

5

RecyclerViewএকটি নেইOnClickListener এবং এটি নিজেই প্রয়োগ করতে হবে।

আপনি যখন থেকে আইটেম ভিউতে ক্লিক করেন তখন আমি অনুরোধ করা একটি পদ্ধতির সাথে একটি OnItemClickListenerইন্টারফেস যুক্ত করতে চাই । সুতরাং একটি আইটেম ক্লিক ক্লিক পরিচালনার দায়িত্ব এবং এর বাইরেAdapteronClickViewHolderViewHolderAdapter । কী কী করণীয় তা স্থির করবে এমন ক্রিয়াকলাপ বা খণ্ডটি Will

শ্রোতা এবং শ্রোতার অবজেক্টে একটি ইন্টারফেস যুক্ত করুন।

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

  ...

  private static OnItemClickListener onItemClickListener;

  ...

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

  ...
}

আমরা আইটেমটির মূল দৃশ্যের ক্লিকটি ক্যাপচার করি এবং যখন কলব্যাকটি onClickঅ্যাডাপ্টারে শ্রোতার কলকে ট্রিগার করে।

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

  ...

  private static OnItemClickListener onItemClickListener;

  ...

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

  ...

  public static class ViewHolder extends RecyclerView.ViewHolder {
      public ImageView imageView;

      public ViewHolder(View itemRootView) {
          super(itemRootView);
          imageView = (ImageView) itemRootView.findViewById(R.id.itemImage);

          itemRootView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  int position  = ViewHolder.super.getAdapterPosition();
                  onItemClickListener.onItemClick(view,position);
              }
          });
      }
  }
}

যেহেতু আমাদের ক্ষেত্রে ক্রিয়াকলাপ বা টুকরো টুকরো টুকরো, আমরা অ্যাডাপ্টারে একটি শ্রোতা নিযুক্ত করি এবং অনক্লিক কলব্যাক আমরা নির্বাচিত আইটেমটি অবস্থান অনুসারে পেয়ে যাব এবং আইটেমের বিশদ ক্রিয়াকলাপটি খুললাম।

public class ItemsFragment extends Fragment {
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       ...    
        ((ItemsAdapter) adapter).setOnItemClickListener(new ItemsAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                //Do something when an item has been clicked
            }
        });
        ...
    }
...
}

5

দুর্ভাগ্যক্রমে বিল্ট-ইন থাকা RecyclerViewকয়েকটি বৈশিষ্ট্য অনুপস্থিত ListView। উদাহরণস্বরূপ, OnItemClickListenerকোনও আইটেম ক্লিক করা হলে ট্রিগার করে এমন একটি যুক্ত করার ক্ষমতা ability RecyclerViewআপনাকে OnClickListenerআপনার অ্যাডাপ্টারে একটি সেট করতে দেয় , তবে আপনার কলিং কোড থেকে অ্যাডাপ্টারে এবং সেই ক্লিক শ্রোতাদের উপর দিয়ে যাওয়া ViewHolderকোনও সাধারণ আইটেম ক্লিক ধরার জন্য জটিল।

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) {
            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) {
        if (mOnItemClickListener != null) {
            view.setOnClickListener(mOnClickListener);
        }
        if (mOnItemLongClickListener != null) {
            view.setOnLongClickListener(mOnLongClickListener);
        }
    }

    @Override
    public void onChildViewDetachedFromWindow(View view) {

    }
};

private ItemClickSupport(RecyclerView recyclerView) {
    mRecyclerView = recyclerView;
    mRecyclerView.setTag(R.id.item_click_support, this);
    mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
}

public static ItemClickSupport addTo(RecyclerView view) {
    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);
}
}

আপনাকে R.id.item_click_supportids.xml ব্যবহার করে সংজ্ঞা দিতে হবে:

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

ফলাফলের কোড ক্লিক শ্রোতাদের এখন এটির মতো দেখাচ্ছে:

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

পুনর্ব্যবহারযোগ্য ক্লিকগুলি সম্পর্কে সংক্ষিপ্ত ব্যাখ্যার জন্য দয়া করে এই লিটাররোবট_ব্লগটি একবার দেখুন


5

আপনি সহজেই বর্ণনা করতে পারেন setOnClickListener হিসাবে অনুসরণ আপনার ViewHolder ক্লাসে:

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView product_name;

    ViewHolder(View itemView) {
        super(itemView);
        product_name = (TextView) itemView.findViewById(R.id.product_name);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int itemPosition = getLayoutPosition();
                Toast.makeText(getApplicationContext(), itemPosition + ":" + String.valueOf(product_name.getText()), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

5

এখানে আমি আরও পড়ি এবং গিস্টটি এখানে ডাউনলোড করুন

এখানে একই যুক্ত করা হচ্ছে

CustomItemClickListener.java

public interface CustomItemClickListener {
 public void onItemClick(View v, int position);
}

ItemsListAdapter.java

public class ItemsListAdapter extends RecyclerView.Adapter<ItemsListAdapter.ViewHolder> {
ArrayList<ItemListSingleItem> data;

Context mContext;
CustomItemClickListener listener;

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.items_list_single_item, parent, false);
    final ViewHolder mViewHolder = new ViewHolder(mView);
    mView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listener.onItemClick(v, mViewHolder.getAdapterPosition());
        }
    });
    return mViewHolder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.itemTitle.setText(Html.fromHtml(data.get(position).getTitle()));
    if (!TextUtils.isEmpty(data.get(position).getThumbnailURL())) {
      // I Love picasso library :) http://square.github.io/picasso/
        Picasso.with(mContext).load(data.get(position).getThumbnailURL()).error(R.drawable.ic_no_image).
                placeholder(R.drawable.ic_no_image).
                transform(new RoundedCornersTransformation(5, 0)).
                into(holder.thumbnailImage);
    } else {
        holder.thumbnailImage.setImageResource(R.drawable.ic_no_image);
    }
}


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

public ItemsListAdapter(Context mContext, ArrayList<ItemsListSingleItem> data, CustomItemClickListener listener) {
    this.data = data;
    this.mContext = mContext;
    this.listener = listener;
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    public TextView itemTitle;
    public ImageView thumbnailImage;

    ViewHolder(View v) {
        super(v);
        itemTitle = (TextView) v
                .findViewById(R.id.post_title);
        thumbnailImage = (ImageView) v.findViewById(R.id.post_thumb_image);
    }
 }
}

4

উপরের বেশিরভাগ উত্তর থেকে, তারা তাদের অনক্লিক্লিস্টারগুলিকে পৃথক আইটেমগুলিতে সেট করছে বলে মনে হচ্ছে। যাইহোক, সমাধান করার জন্য প্রস্তুত সমাধানটি খুব সহজ তবে এখনও অনেকের কাছেই স্বজ্ঞাত নয়। অনেকে ভুলে যাচ্ছেন যে অন্যান্য উপাদানগুলি সর্বদা পিতামন্ডলে থাকে যা তালিকাগুলি বা পুনর্ব্যক্তিকর দৃশ্যে আইটেমগুলি প্রদর্শন করতে ব্যবহৃত হয়। এই সমাধানটি কেবলমাত্র এই প্যারেন্ট ভিউতে একক অন্লিক শ্রোতাদের সেট করার বিষয়ে এবং পালাটি প্লে হয়। সমাধানের তালিকা বা পুনর্ব্যবহারযোগ্য ভিউ থেকে ক্লিক করা আইটেমের অবস্থান পাস করার একটি উপায়ও অন্তর্ভুক্ত। এখানে, আমাদের মূল রুটভিউটি অ্যান্ড্রয়েড সমর্থন লাইব্রেরির কার্ডভিউ। এখানে নমুনা কোড

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

public static final String LOG_TAG = ListAdapter.class.getSimpleName();
private Cursor mDataset;
private Context mContext;
private ViewHolder mViewHolder;

// Provide a suitable constructor (depends on the kind of dataset)
public ListAdapter(Context context, Cursor Dataset) {
    mDataset = Dataset;
    mContext = context;
}

// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list_business_view, parent, false);

    mViewHolder = new ViewHolder(v);
    return mViewHolder;
}

public void setData(Cursor newdata) {
    this.mDataset = newdata;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//Bind data to other items here. To save time, i have ommited that.
           //here is where we attach a click listerner for an item in the recycler list rather than for each element of a given item.
            holder.card.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, " Just cliked item at position " + itemPosition, Toast.LENGTH_LONG).show();

            }
        });

    }
}

// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    if (null != mDataset) {
        return mDataset.getCount();
    }
    return 0;

}


// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public static class ViewHolder extends RecyclerView.ViewHolder{
    // each data item is just a string in this case
    public final TextView mBusinesssName; // View for the business name
    public final TextView mBusinessCategory; //View for the category name
    public final ImageView businessImage; // View for the business category image Image
    public final TextView mBusinessDistance; // View for the distance
    public final CardView card;

    public ViewHolder(View view) {
        super(view);
        mBusinesssName = (TextView) view.findViewById(R.id.list_item_name_textview);
        mBusinessCategory = (TextView) view.findViewById(R.id.list_item_category_textview);
        mBusinessDistance = (TextView) view.findViewById(R.id.list_item_dist_textview);
        businessImage = (ImageView) view.findViewById(R.id.list_item_icon);
        card = (CardView) view.findViewById(R.id.card_view);

    }
}
}

4

কোর্লিন নাহারমানের উত্তরের বাস্তবায়ন :

mRecyclerView.addOnItemTouchListener(object  : RecyclerItemClickListener(this, mRecyclerView,object :RecyclerItemClickListener.OnItemClickListener{
            override fun onItemClick(view: View, position: Int) {

            }

            override fun onLongItemClick(view: View?, position: Int) {

            }
}){})

পুনর্ব্যবহারযোগ্য আইটেমক্লিকলিস্টার.জাভা:

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View


open class RecyclerItemClickListener(context: Context, recyclerView: RecyclerView, private val mListener: OnItemClickListener?) : RecyclerView.OnItemTouchListener {

    private var mGestureDetector: GestureDetector

    interface OnItemClickListener {
        fun onItemClick(view: View, position: Int)

        fun onLongItemClick(view: View?, position: Int)
    }

    init {
        mGestureDetector = GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
            override fun onSingleTapUp(e: MotionEvent): Boolean {
                return true
            }

            override fun onLongPress(e: MotionEvent) {
                val child = recyclerView.findChildViewUnder(e.x, e.y)
                if (child != null && mListener != null) {
                    mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child))
                }
            }
        })
    }

    override fun onInterceptTouchEvent(view: RecyclerView, e: MotionEvent): Boolean {
        val childView = view.findChildViewUnder(e.x, e.y)
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView))
            return true
        }
        return false
    }

    override fun onTouchEvent(view: RecyclerView, motionEvent: MotionEvent) {}

    override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}
}

3
public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title, year, genre;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.title);
            genre = (TextView) view.findViewById(R.id.genre);
            year = (TextView) view.findViewById(R.id.year);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, ""+getAdapterPosition(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

3

আমার কাস্টম অ্যাডাপ্টারের জন্য এখানে সম্পূর্ণ কোড রয়েছে এই কোডটি "list_item" নামক এক্সএমএল ফাইলে সংজ্ঞায়িত তালিকা আইটেমগুলির সাথে সারিগুলিকে স্ফীত করবে এটি স্বতন্ত্র অবস্থানের সাথে সমস্ত তালিকা আইটেমের সারিগুলিতে ক্লিক ইভেন্ট সম্পাদন করবে।

public class MyCustomAdapter extends RecyclerView.Adapter`<`AdapterMyCustomAdapter.ViewHolder> {

    public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
        public onItemClickListener mListener;
        public ViewHolder(View v, onItemClickListener listener) {
            super(v);
            mListener =listener;
            v.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            mListener.onRecyclerItemClick(v, getPosition());
        }

        public static interface onItemClickListener {
            public void onRecyclerItemClick(View view , int position);
        }
    }

    @Override
    public int getItemCount() {
        return 5;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int pos) {      

    }

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

    /* here list_item is an xml file we want to inflate ...it is same as we do in case of listview for customization.*/

        MyCustomAdapter.ViewHolder vh = new ViewHolder(v, new MyCustomAdapter.ViewHolder.onItemClickListener() {

            @Override
            public void onRecyclerItemClick(View view, int position) {
                System.out.println("clicked on list item at position " +position);
            } 
        });
        return vh;
    }
}

2

আমরা জাভা দুর্বল রেফারেন্স ব্যবহার করে এটি করতে পারি। শব্দার্থকভাবে, ভিউ হোল্ডারটি হ'ল ক্লিক ইভেন্টটির প্রতিক্রিয়া জানানো উচিত বা সঠিক উত্তরদাতাকে এটেল করা উচিত।

আমাদের লক্ষ্য:

  1. শ্রেণীর ইভেন্টগুলিতে প্রতিক্রিয়া জানানো ক্লাস সম্পর্কে ভিউহোল্ডারের কিছুই জানতে হবে না এটি ব্যতীত এটি একটি নির্দিষ্ট ইন্টারফেস প্রয়োগ করে।
  2. ক্লিক হ্যান্ডলারটি ক্লিক করা দৃশ্যগুলির পুনর্ব্যবহারযোগ্য ভিউতে পজিশন পান।
  3. ভিউ ধারকটিতে কোন ভিউ ক্লিক করা হয়েছিল তা আমাদের সনাক্ত করতে সক্ষম হওয়া উচিত ।
  4. সমস্ত উপাদানগুলির মধ্যে আলগা সংযোগ বজায় রাখুন এবং কোনও ধরে রাখার চক্র সৃষ্টি করবেন না।

পদক্ষেপ:

  1. ক্লিক প্রতিক্রিয়াগুলি পরিচালনা করতে একটি ইন্টারফেস তৈরি করুন।

  2. ক্লিকটি পরিচালনা করবে এমন কার্যকলাপে এই ইন্টারফেসটি প্রয়োগ করুন।

  3. দুর্বল রেফারেন্স এবং এটি নির্ধারণকারী কোনও কনস্ট্রাক্টর রাখার জন্য রিসাইক্লিউউ অ্যাডাপ্টারে একটি সদস্য ভেরিয়েবল যুক্ত করুন।

  4. পুনর্ব্যবহারযোগ্য ভিউহোল্ডার এ একই করুন এবং অবস্থানের সন্ধানের জন্য সদস্য ভেরিয়েবল যুক্ত করুন।

  5. ভিউহোল্ডারটিতে আপনার পছন্দ মত যে কোনও ভিউতে ক্লিক শ্রোতাদের সেট করুন, তারপরে হ্যান্ডেল করার জন্য প্রতিক্রিয়াশীলকে কলব্যাক করুন।

  6. বাঁধার সময় অবস্থান নির্ধারণ করতে আপনার অনবিন্দভিউহোল্ডার পদ্ধতিটি পরিবর্তন করুন।

  7. প্রতিক্রিয়াটিকে ভিউহোল্ডারের কাছে নামিয়ে দিন।

  8. প্রতিক্রিয়াকারীতে, আপনি এখন ভিউতে getId () ব্যবহার করতে পারবেন যা দেখার জন্য ক্লিক করেছেন figure

এবং এখানে একটি সংক্ষিপ্তসার রয়েছে যাতে আপনি দেখতে পারেন কীভাবে এটি সমস্ত একসাথে ফিট করে: রিসাইক্লারভিউ ক্লিক হ্যান্ডলিং


2

আমি অনেক উত্তর আছে সচেতন, কিন্তু আমি ভেবেছিলাম আমি সম্ভবত এটি আমার বাস্তবায়ন প্রদান করতে পারেন। ( আমি উত্তর দিয়েছি এমন আরও একটি প্রশ্নের পুরো বিশদ পাওয়া যাবে )।

সুতরাং, ক্লিক শ্রোতা যুক্ত করতে, আপনার অভ্যন্তর ViewHolderশ্রেণীর প্রয়োগ করা দরকার View.OnClickListener। এর কারণ হল আপনি একটি সেট হবে OnClickListenerথেকে itemViewএর প্যারামিটার ViewHolderএর কন্সট্রাকটর। আমার অর্থ কী তা আমি আপনাকে দেখাতে দাও:

public class ExampleClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView text1, text2;

    ExampleClickViewHolder(View itemView) {
        super(itemView);

        // we do this because we want to check when an item has been clicked:
        itemView.setOnClickListener(this);

        // now, like before, we assign our View variables
        title = (TextView) itemView.findViewById(R.id.text1);
        subtitle = (TextView) itemView.findViewById(R.id.text2);
    }

    @Override
    public void onClick(View v) {
        // The user may not set a click listener for list items, in which case our listener
        // will be null, so we need to check for this
        if (mOnEntryClickListener != null) {
            mOnEntryClickListener.onEntryClick(v, getLayoutPosition());
        }
    }
}

আপনার Adapterআর সেটটার পদ্ধতির জন্য কাস্টম ইন্টারফেস হ'ল কেবলমাত্র অন্যান্য জিনিসগুলি আপনাকে যুক্ত করতে হবে :

private OnEntryClickListener mOnEntryClickListener;

public interface OnEntryClickListener {
    void onEntryClick(View view, int position);
}

public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
    mOnEntryClickListener = onEntryClickListener;
}

সুতরাং আপনার নতুন, ক্লিক-সমর্থনকারী Adapter সম্পূর্ণ।

এখন, এটি ব্যবহার করুন ...

    ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
    clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
        @Override
        public void onEntryClick(View view, int position) {
            // stuff that will happen when a list item is clicked
        }
    });

এটি মূলত আপনি কীভাবে একটি সাধারণ সেট আপ করবেন Adapter বাদে আপনি যখন ব্যবহারকারীর কোনও নির্দিষ্ট তালিকা আইটেম ক্লিক করেন তখন আপনি কী করবেন তা নিয়ন্ত্রণ করতে আপনি তৈরি করেছেন সেটার পদ্ধতিটি আপনি ব্যবহার করেন।

গিটহাবের উপর এই গিস্টটিতে আমি তৈরি উদাহরণগুলির একটি সেটও দেখতে পারি:

https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07


আপনার getLayoutPosition () এর পরিবর্তে getAdapterPosition () ব্যবহার করা উচিত
ব্লেডকডার

2

এটি আমি পুনরায় ব্যবহার করতে চাই OnClickListener

  public class TestAdapter extends RecyclerView.Adapter<TestAdapter.MyviewHolder>
                                         implements View.OnClickListener

ভিউহোডারে আইটেমলেটের পিতামাতাকে নিন

  public class MyviewHolder extends RecyclerView.ViewHolder {

       LinearLayout linearLayout_item;

        public MyviewHolder(View itemView) {
            super(itemView);
            linearLayout_item=itemView.findViewById(R.id.linearLayout_item);
        }
    }

অনবিন্দভিউহোল্ডার পজিশনে ট্যাগ ট্যাগ করুন

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

       holder.linearLayout_item.setTag(position);
       holder.linearLayout_item.setOnClickListener(this);
    }

এবং অনক্লিক এ

 @Override
public void onClick(View v) {

    int position = (int) v.getTag();
    switch (v.getId()) {
        case R.id.linearLayout_item:

            // do some thing with position 

            break;
    }
}

2

আমার জন্য এটি করার পরিষ্কার উপায় হল এটি।

অ্যাডাপ্টার নির্মাণকারী

private class EnvironmentTypeRecyclerViewAdapter extends RecyclerView.Adapter<EnvironmentTypeRecyclerViewAdapter.ViewHolder>
{
     private final EnvironmentTypeRecyclerViewAdapterListener mEnvironmentTypeRecyclerViewAdapterListener;
     private List<Environment> mEnvironmentsData;

     public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
     {
         public ViewHolder(View v)
         {
             super(v);
             v.setOnClickListener(this);

         }

         @Override
         public void onClick(View v)
         {
              Environment environment = mEnvironmentsData.get(getAdapterPosition());
              if (mEnvironmentTypeRecyclerViewAdapterListener != null && environment != null) {
                      mEnvironmentTypeRecyclerViewAdapterListener.onListItemSelected(environment);      
              }
        }

        public EnvironmentTypeRecyclerViewAdapter(List<SmallCellEnvironment> environments, EnvironmentTypeRecyclerViewAdapterListener environmentTypeRecyclerViewAdapterListener)
        {
            mEnvironmentTypeRecyclerViewAdapterListener = environmentTypeRecyclerViewAdapterListener;
            mEnvironmentsData = environments;
        }
}

লিঙ্কযুক্ত ইন্টারফেস

private interface EnvironmentTypeRecyclerViewAdapterListener
{
    void onListItemSelected(Environment environment);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.