Android Fragments 单击回收查看项目后无法更改片段

col17t5w  于 2023-02-08  发布在  Android
关注(0)|答案(3)|浏览(125)

我的主活动中有RecyclerView。我想在单击不同的RecyclerView项目后更改不同的片段。我尝试使用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);
    }
}

}

z9zf31ra

z9zf31ra1#

    • 您忘记调用commit()**

执行以下操作:

(((FragmentActivity)context).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.framelayout, new SecondFragment()).commit();

在您对事务调用commit()之前,不会呈现片段,因为事务使用构建器模式,并且在构建器模式中有一个方法表示我不想做任何其他事情,只想创建对象,在本例中,这些方法通常是namecreate()build()commit()

luaexgnf

luaexgnf2#

您可以通过接口使用回调实现来处理Activity中的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);
bz4sfanl

bz4sfanl3#

绑定视图夹持器上的内部

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()).addToBackStack(null).commit();
            }
            else if(position ==2){
            ((FragmentActivity)context).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.framelayout, new SecondFragment()).addToBackStack(null).commit();
            }
        }
    });

}

希望这对你有帮助。

相关问题