首页 > 解决方案 > 单击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);
    }
}

}

标签: javaandroidxmlandroid-fragmentsandroid-recyclerview

解决方案


您可以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);

推荐阅读