Android 从RecycleView适配器Onclick启动片段

Android 从RecycleView适配器Onclick启动片段,android,android-fragments,onclick,android-recyclerview,Android,Android Fragments,Onclick,Android Recyclerview,嗨,我有一个RecycleView适配器和一个按钮。我要那个按钮开始一个片段。我可以启动一个活动,但不能启动一个片段。我已经为我的按钮 @Override public void onClick(View v) { Bundle bundle = new Bundle(); bundle.putParcelable("event", events.get(getLayoutPosition())); Frag

嗨,我有一个
RecycleView
适配器和一个按钮。我要那个按钮开始一个片段。我可以启动一个活动,但不能启动一个片段。我已经为我的
按钮

@Override
        public void onClick(View v) {
            Bundle bundle = new Bundle();
            bundle.putParcelable("event", events.get(getLayoutPosition()));
            Fragment fragment = new EditEventDetailFragment();
            fragment.setArguments(bundle);
            fragment.getFragmentManager().beginTransaction().replace(R.id.contentMainDrawer,fragment).commit();
        }
但have error invoke null对象(
contentmainprawer
)是我的主要活动内容布局


任何帮助都将不胜感激。片段主机回收视图是从Mainactivity调用的

使用下面的代码替换片段

 Fragment fragment = new EditEventDetailFragment();
 FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
 fragmentTransaction.replace(R.id.contentMainDrawer, fragment, "tag").commit();

如果您在适配器中使用此代码,请将
getActivity()
替换为
((活动)上下文)。

您好,我找到了2个答案,可以帮助需要的人。答案是使用承载调用片段的活动。非常感谢@Mohit Suthar

Bundle bundle = new Bundle();
            bundle.putParcelable("event", events.get(getLayoutPosition()));
            Fragment fragment = new EditEventDetailFragment();
            fragment.setArguments(bundle);

            FragmentManager fragmentManager = ((MainActivity) context).getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.contentMainDrawer, fragment, "tag").commit();

嗯,您不应该使用刚刚创建的片段中的FragmentManager。使用getFragmentManager()(或getSupportFragmentManager(),具体取决于您使用的片段类型)替换这一行fragment.getFragmentManager()。感谢您的yrs帮助,但代码位于RecycleView适配器内(不是其他活动或片段)。如果您确实需要这样做,那么您可以这样做:((活动)getFragmentManager()。但这并不是一个好办法。您可以将onClick的处理移到父类。看看这篇文章:似乎不能使用((活动)v.getContext.getFragmentManager()。Move-OnClick处理意味着OnClick将在使用适配器的类中处理?但是很难让物品处于点击位置?我写得很快。我希望这能让你对如何实现它有一个基本的想法:谢谢你的回复,但是代码在recycleView适配器中,无法调用getActivity()或者我不知道如何调用getActivity(),我尝试了几次,但这行代码不起作用FragmentManager FragmentManager=((活动)上下文)。getSupportFragmentManager();无法调用getSupportFragmentManager将getSupportFragmentManager替换为getChildFragmentManager();冲突,因为我的片段使用了support v4(我仍然不知道是使用app.fragment还是support v4.FragmentManager,也无法将getFragmentManager更改为getChildFragmentManager