0

嗨,我有A RecycleViewAdapter和A按鈕。我想要那個按鈕來啓動一個片段。我可以開始一個活動,但不是一個片段。我已經試過這Onclick方法我Button從RecycleView適配器啓動片段Onclick

@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(); 
     } 

但有錯誤引用空對象(contentMainDrawer)是我的主要活動content_layout。

任何幫助是非常感謝。該片段的主機回收的觀點是從Mainactivity調用下面的代碼

+0

呃,你不應該使用剛剛創建的Fragment中的FragmentManager。用getFragmentManager()(或getSupportFragmentManager()根據你正在使用什麼類型的片段替換這行fragment.getFragmentManager() – scana

+0

謝謝你的幫助,但代碼在RecycleView適配器內(不是另一個活動或片段) –

+0

,如果你真的需要這樣做,那麼你可以這樣做:((Activity)v.getContext).getFragmentManager()。但這不是一個好方法。你可以將onClick的處理移動到父類。看看這篇文章:http://stackoverflow.com/a/24933117/1139527 – scana

回答

0

用於替換片段

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

如果您正在使用內部適配器不是取代getActivity()((Activity) context).

+0

謝謝你的迴應,但代碼裏面recycleView適配器不能調用getActivity()或我不知道如何調用getActivity() –

+0

我試了幾次,但這一行不工作FragmentManager fragmentManager = ((Activity)context).getSupportFragmentManager();不能調用getSupportFragmentManager –

+0

替換getSupportFragmentManager getChildFragmentManager() –

0

你好這個代碼,我已經找到2回答幫助需要的人。答案是使用承載調用片段的Activity。非常感謝@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(); 
相關問題