java - 单击recyclerview项目后无法更改片段
问题描述
我的主要活动中有 RecyclerView。单击不同的recyclerview Items后,我想更改不同的片段。我通过使用来自 onbindviewholder() 的位置来尝试这个,但是当我单击 recyclerview 项目时我无法更改片段。我没有收到任何错误,但同时点击 recyclerview 时什么也没有发生。请检查我的代码并告诉我我错在哪里或我缺少哪一行代码。
回收适配器代码:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
ArrayList<NewModel> newModels;
Context context;
public RecyclerAdapter(ArrayList<NewModel>newModels, Context context){
this.newModels = newModels;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recy_layout, parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.imageView.setImageResource(newModels.get(position).getImg());
holder.textView.setText(newModels.get(position).getText());
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(position ==1){
((FragmentActivity)context).getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout, new FirstFragment());
}
else if(position ==2){
((FragmentActivity)context).getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout, new SecondFragment());
}
}
});
}
@Override
public int getItemCount() {
return newModels.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.cirlceimg);
textView = itemView.findViewById(R.id.text1);
}
}
}
解决方案
您可以onClickListener
使用带有接口的回调实现来处理您的活动。
界面:
public interface OnItemClickListener {
void onItemClick(int position);
}
将侦听器添加到适配器的构造函数
ArrayList<NewModel> newModels;
Context context;
private final OnItemClickListener listener;
public RecyclerAdapter(ArrayList<NewModel>newModels, Context context, OnItemClickListener listener){
this.newModels = newModels;
this.context = context;
this.listener = listener;
}
在您的onBindViewHolder
设置中,clicklistener
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.imageView.setImageResource(newModels.get(position).getImg());
holder.textView.setText(newModels.get(position).getText());
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(position);
}
});
}
在您的活动中:
RecyclerAdapter rvAdapter = new RecyclerAdapter(newModels, this, new RecyclerAdapter.OnItemClickListener() {
@Override public void onItemClick(int item) {
if(position ==1){
getSupportFragmentManager().beginTransaction().replace(R.id.framelayout, new FirstFragment()).commit();;}
else if(position ==2){
getSupportFragmentManager().beginTransaction().replace(R.id.framelayout, new SecondFragment()).commit();;
}
}});
recycler.setAdapter(rvAdapter);
推荐阅读
- javascript - 用 jQuery 乘以简码值
- python - 在pandas python中按列号读取csv文件
- python - 使用生成器填充/创建一个没有 for 循环的 numpy 数组
- c - zlib gzwrite 不写整个文件 C
- realm - 如何在 Realm 中查找孤立的列表项
- javascript - Vue.js - 在按钮单击时迭代数据对象
- javascript - WebRTC 和 Node.JS:为什么无法显示远程视频
- python - 如何打印出字典中的值和项目,python
- sql - 正则表达式:给出两个匹配模式 ab{2,4}de 的例子
- python - Python从文件中提取最长的单词