java - 如何在以下代码中为 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);
}
}
}
以上是适配器代码
解决方案
您可以在您的适配器中维护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
}
}));
推荐阅读
- sql - 使用 Excel-VBA 和 ADODB 对象时出现“自动化错误”“未指定错误”
- java - Temporarily increase log4j2 logger level in multi-threaded service
- csv - 需要运行收集多次迭代并需要运行我为 json body 声明数据的 csv 文件
- java - 在投票应用程序的活动之间传递数据
- javascript - 如何按时间戳对数组进行排序?
- r - 使用 R 中的条件通过键列交叉连接两个数据帧
- kubernetes - Pod 在不同节点 (EKS) 上时不会相互通信
- javascript - 如何处理从 Input() 接收的 routerLink 和 (click)
- javascript - getElementById() 方法不适用于我的最后一个函数
- sql-server - 在 SQL Server 结果中查询 XML 的问题