从Recyclerview的View Holder打开片段

时间:2018-08-05 21:51:28

标签: android android-recyclerview

我的Recyclerview的视图持有者有一个按钮,该按钮应打开特定项目的底部对话框。我正在构建一个汽车应用程序,并且用户可以向他收藏的汽车中添加便笺,我正在谈论的recyclerview列出了他所有的收藏,他应该能够从喜欢的片段中添加便笺。这段代码需要打开带有注释的片段

但是出现问题,视图持有者无法识别getFragmentManager()

        mAddNote.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AddNoteFragment addNoteFragment = new AddNoteFragment();
            addNoteFragment.setCar(car);
            addNoteFragment.setIcon(mNoteIcon);
            addNoteFragment.show(getFragmentManager(), addNoteFragment.getTag());
        }
    });

代码在我的视图支架中

2 个答案:

答案 0 :(得分:1)

您必须引用ActivityContext,以便将其用作

addNoteFragment.show(activity.getFragmentManager(), addNoteFragment.getTag());
//                   ^^^^^^^
//or
// addNoteFragment.show((YourActivityName(context)).getFragmentManager(), addNoteFragment.getTag());

因为片段管理器是特定于某些活动的,所以您要么需要处于活动中才能获取片段管理器,要么需要一个活动实例(或将上下文强制转换为活动)来获取它

答案 1 :(得分:1)

在您的Adapter类中,将构造函数设置为将Context作为参数:

Private Context mContext;
public MyAdapter(Context context) {
    mContext = context;
}

在您的持有人中:

try {
    final Activity activity (Activity) mContext;
    fragmentManager = activity.getFragmentManager();
catch(ClassCastException e) {
    e.printStackTrace();
}
If(fragmentManager != null) {
    //use your fragmentManager
}

或在适配器中创建一个接口,该接口具有要在“活动”中实现的onClick方法。