首页 > 解决方案 > 如何在以下代码中为 Recycler Adapter 设置 On Click Listener?

问题描述

实际上我不能为这个回收器视图适配器设置点击监听器。如果你能提供帮助,这意味着很多???

我已经尝试了所有可能的方法来添加它,但我不能这样做,因为我是新手....

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

我希望如果我单击显示的任何项目,它应该重定向到另一个活动。我需要在项目点击监听器上设置

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

}

以上是适配器代码

标签: javaandroid

解决方案


您可以在您的适配器中维护onCLick您也可以直接添加Item Touch Listener您的 RecyclerView ..为此首先在您的应用程序中创建此类

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

}

然后打电话addOnItemTouchListener给你的回收站查看这个..

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

推荐阅读