0

Actually i cant set on click listener for this recycler view adapter. it means a lot if you gyz can help???

i have tried all possible ways to add it but i cant do it because am a newbie....

Public class Result_page_travelumActivity extends AppCompatActivity {
    Integer image1[] ={R.drawable.img1,R.drawable.img2,R.drawable.img3};
    private PrefManager prefnew;

    private SharedPreferences pref;
    private ProgressDialog pDialog;
    private RecyclerView recyclerView;
    private Result_page_travelum_adapter result_page_travelum_adapter;
    private ArrayList<Result_page_travelum_model> result_page_travelum_models;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try
        {
            this.getSupportActionBar().hide();
        }
        catch (NullPointerException e){}
        setContentView(R.layout.activity_result_page_travelum);

        recyclerView = findViewById(R.id.rc1);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(Result_page_travelumActivity.this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        result_page_travelum_models = new ArrayList<>();

        for (int i=0;i < image1.length;i++) {
            Result_page_travelum_model ab = new Result_page_travelum_model(image1[i]);
            result_page_travelum_models.add(ab);
        }

        result_page_travelum_adapter = new Result_page_travelum_adapter(Result_page_travelumActivity.this,result_page_travelum_models);
        recyclerView.setAdapter(result_page_travelum_adapter);
    }
}

I expect if i click any item displayed it should redirect to another activity. i need to set on item click listener

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

Context context;
ArrayList<Result_page_travelum_model>result_page_travelum_models;

public Result_page_travelum_adapter(Context context, ArrayList<Result_page_travelum_model> result_page_travelum_models) {
    this.context = context;
    this.result_page_travelum_models = result_page_travelum_models;
}

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

@Override
public void onBindViewHolder(@NonNull Result_page_travelum_adapter.ViewHolder holder, int position) {

    holder.image1.setImageResource(result_page_travelum_models.get(position).getImage1());
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView image1;
    public ViewHolder(View itemView) {
        super(itemView);

        image1 = itemView.findViewById(R.id.image1);
    }
}

}

the above is adapter code

Joshua J
  • 11
  • 4

2 Answers2

0

Basically you want to do the item handling inside of your adapter which is connected to your RecyclerView.

Registering the Listener could be done in the onBindViewHolder method of your adapter.

Or as a more explicit approach directly in the ViewHolder which is also considered as best practice.

You can check the example of Antonio Leiva https://antonioleiva.com/recyclerview-listener/

Robin Vinzenz
  • 1,247
  • 15
  • 19
  • `Registering the Listener can preferebly be done in the onBindViewHolder` You sure? https://stackoverflow.com/questions/33845846/why-is-adding-an-onclicklistener-inside-onbindviewholder-of-a-recyclerview-adapt – Zun Jul 03 '19 at 09:45
0

You can maintain onCLick in your adapater but you can directly add Item Touch Listener on your RecyclerView also..For this first make this class in your app.

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {

private OnItemClickListener mListener;

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

GestureDetector mGestureDetector;

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

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

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

@Override
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}

}

Then call addOnItemTouchListener on your recyclerView this this..

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                 //Intent to another activity
                }
            }));
Prachi Singh
  • 564
  • 3
  • 8