我的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());
}
});
代码在我的视图支架中
答案 0 :(得分:1)
您必须引用Activity
或Context
,以便将其用作
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方法。