2017-07-18 1 views
0

Comment ouvrir un fragment à partir d'un autre fragment? Lorsque j'essaie d'ouvrir le fragment EditNote à partir d'un autre fragment ShowNotes, j'obtiens cette erreur.Impossible d'ouvrir un fragment à partir d'un autre fragment - Aucune vue trouvée pour l'ID 0x7f0e0084

No view found for id 0x7f0e0084 (com.example.lalala.notepad:id/container_frame_layout) for fragment EditNote{3005d06 #1 id=0x7f0e0084} 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1293) 
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 

ShowNotes.java est le fragment dont je veux ouvrir un autre fragment

public class ShowNotes extends Fragment { 
private ListView lv; 
ArrayList<Note> arrayList; 
private View view; 
ArrayAdapter<String> adapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.activity_show_notes, container, false); 
    arrayList = new ArrayList<>(); 
    Note n = new Note("Example", "It's just an example"); 

    arrayList.add(n); 

    return view; 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    NoteAdapter adapter = new NoteAdapter(view.getContext(), arrayList); 
    lv = (ListView) getView().findViewById(R.id.notes_listview); 
    lv.setAdapter(adapter); 


    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      EditNote fragment2=new EditNote(); 
      FragmentManager fragmentManager=getActivity().getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container_frame_layout,fragment2); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 
}} 

EditNote.java est maintenant un fragment presque vide, il se gonfle juste la vue.

public class EditNote extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.activity_edit_note, container, false); 
    return view; 
}} 

activity_edit_note.xml contient framelayout dans lequel je veux gonfler la vue

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/container_frame_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</FrameLayout> 
</FrameLayout> 
+0

'Impossible d'ouvrir un fragment à partir d'un autre fragment'. Je pense que vous devriez lire le message d'erreur à nouveau. – Joshua

Répondre

0

Vous utilisez getSupportFragmentManager pas getFragmentManager()

Essayez de changer ces lignes

EditNote fragment2=new EditNote(); 
FragmentManager fragmentManager=getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.container_frame_layout,fragment2); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

à

EditNote fragment2=new EditNote(); 
    this.getFragmentManager().beginTransaction() 
    .replace(R.id.container_frame_layout, fragment2,TAG_FRAGMENT) 
    .addToBackStack(null) 
    .commit(); 
0

Vous devez initialiser votre viewPager avant de l'utiliser dans la transaction Fragment.

ViewPager pager = (ViewPager) findViewById (R.id.container_frame_layout, fragment2);