Frammento non è stato fissato ancora?

Sotto è il mio codice. Quello che sto cercando di realizzare è che io sono la visualizzazione di viewholder all’interno del mio Riciclatore di vista. Vista interna cercapersone io sono la visualizzazione di un frammento e passare il dito verso sinistra io sono la visualizzazione di un altro frammento. Ma quando si esegue l’applicazione. App va in crash.Non so dove sto andando male. Penso che sia un po ‘ dove nel frammento concetto. Si prega di aiutare me

 @Override
 public void onBindViewHolder(ManageCustomerViewHolder holder, int position) 
 {
     holder.viewPager.setAdapter(new MyPageAdapter(fragmentManager, fragments));
 }

 private List<Fragment> getFragments() 
 {
     List<Fragment> fList = new ArrayList<Fragment>();
     fList.add(MyFragment.newInstance("Fragment 1"));
     fList.add(Myfragment1.newInstance("Fragment 2"));

     return fList;
 }

 public class ManageCustomerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
 {
    ViewPager viewPager;
    viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);

    itemView.setOnClickListener(this);
 }

Questo è il tipo di errore :

java.lang.IllegalStateException: Frammento non è stata collegata sicurezza.

  • Puoi postare dove getFragments() viene chiamato?
InformationsquelleAutor Srikanth G | 2017-04-22

 

5 Replies
  1. 34

    Stavo affrontando lo stesso problema nella mia app.

    Stack Trace:

    java.lang.IllegalStateException: Fragment has not been attached yet. android.support.v4.app.Fragment.instantiateChildFragmentManager(Fragment.java:2154)
    android.support.v4.app.Fragment.getChildFragmentManager(Fragment.java:704)

    L’applicazione andava in crash a questa linea:

    function performSomeActionInChildFragments() {
        List<Fragment> fragments = getChildFragmentManager().getFragments();
        ...
    }

    Questo accade quando il frammento non è più attaccato alla sua attività padre/frammento. In modo semplice, isAdded() controllo dovrebbe risolvere questo problema per voi.

    Fix:

    function performSomeActionInChildFragments() {
        if (!isAdded()) return;
        List<Fragment> fragments = getChildFragmentManager().getFragments();
        ...
    }

    Da documentazione:

    isAdded() – restituisce true se il frammento è attualmente aggiunto alla propria attività.

    • Questo ha funzionato per quando ho avuto un frammento e un DialogFragment all’interno di esso è stato annulla, quando tornando a questo da un altro frammento. Ma io sono un po ‘ confondere, perché non tornare !isAdded() return; consentire il resto del codice per essere eseguito e non bloccarsi se il childFragmentManager è ancora nulla? O come funziona questo metodo non consente la getChildFragmentManager per non essere null?
    • Se si controlla il codice sorgente di android per isAdded() vedrai internamente controlla se childFragmentManager è nullo o non è, se è null, quindi isAdded se è false. Quindi torniamo presto e non hanno bisogno di un esplicito controllo null per getChildFragmentManager()
    • impressionante la soluzione grazie….
  2. 7

    Ho affrontato questa eccezione oggi. Dopo la ricerca di risposte ho notato che tutti sono correlati con ViewPager e getFragmentManger() o, nel mio caso getChildFragmentManager().

    Beh, a volte queste cose accadono quando non c’è il frammento così nulla può essere collegato o mostrato. Pertanto, quando il mio frammento è stato creato io ora salvare in una variabile il frammento manager, allora io uso il manager, nel mio Viewpager esempio così ci sarà sempre essere un manager salvato in classe.
    Per chiarire di cosa sto dicendo: “ecco il mio codice:

    Prima

        ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
        adapter.addFragment(tabLlegadaFragment, "Llegada");
        adapter.addFragment(tabIngresoFragment, "Ingreso");
        viewPager.setAdapter(adapter);

    Qui ho affrontato l’errore, perché ho ricreato la vista con un certo metodo e ho anche premuto il pulsante indietro. Così, quando che è successo di Android è alla ricerca di un getChildFragmentManager() da un Frammento che non esiste più o è andato perduto, perché ho premuto il pulsante indietro)

    Ora

        FragmentManager                 childFragMang;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
           View view = inflater.inflate(R.layout.fragment_tab_main, container, false);
           ..
           childFragMang= getChildFragmentManager();
           ..
           return view;
    
        }

    e quando l’ho chiamata Viewpager io uso il manager

        ViewPagerAdapter adapter = new ViewPagerAdapter(childFragMang);
        adapter.addFragment(tabLlegadaFragment, "Llegada");
        adapter.addFragment(tabIngresoFragment, "Ingreso");
        viewPager.setAdapter(adapter);

    Io non faccia eccezione di nuovo così fosse, perché il mio frammento era scomparso quando ho premuto indietro e non c’erano getChildFragmentManager() per chiamare

  3. 2

    si può fare questo

    FragmentManager childFragmentManager ;

    onCreate :

    childFragmentManager = getChildFragmentManager();

    quindi è possibile utilizzare childFragmentManager in

    ViewPagerAdapter adapter = new ViewPagerAdapter(childFragmentManager);
    adapter.addFragment(tabLlegadaFragment, "Llegada");
    adapter.addFragment(tabIngresoFragment, "Ingreso");
    viewPager.setAdapter(adapter);

    `

    e non dimenticate, prima di farlo è necessario controllare la vostra attività è stato aggiunto o meno.
    si può provare in questo modo:

    if(getActivity()!=null && isAdded()) //do now
  4. 0

    Non si dovrebbe essere cercando di creare un’istanza di Frammenti. I frammenti vengono creati e hanno cicli di vita che sono controllati dal sistema Android. Rispondere a eventi del ciclo di vita con l’override di metodi di callback come onAttached (chiamato quando il frammento è legato alla sua Activity)

Lascia un commento