Autore Topic: Crash comunicazione fragment  (Letto 327 volte)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1232
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Crash comunicazione fragment
« il: 27 Agosto 2014, 23:27:19 CEST »
0
Ciao a tutti.

Devo necessariamente far comunicare due fragment. Quando dico comunicare intendo chiamare un metodo dal fragment A presente nel fragment B avendo un viewPager che espande in una schermata un fragment alla volta (Quindi non ce ne sono due visualizzabili insieme).

Guida google: http://developer.android.com/training/basics/fragments/communicating.html

Devo quindi connettere i fragment all' activity parent e da essa richiamare i miei metodi. Quindi da Frag A vado ad Activity A e poi da essa rivado a Frag B.

Dunque nel mio FragA ho:
Codice (Java): [Seleziona]
 private OnHeadlineSelectedListener mCallback;

// Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected();
    }

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
       

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }

    }

nel momento che faccio db.addName(String nome) faccio anche   mCallback.onArticleSelected();
Nel FragMent B faccio public class FragB ...implement FragA.OnHeadlineSelectedListener.

Quindi faccio:
Codice (Java): [Seleziona]
 @Override
    public void onArticleSelected() {
        // to-do - codice rimosso per evitare possibili evirar
    }


Il mio problema: AL primo avvio funziona bene. Viene selezionato il FragA di default. Aggiungo il nome al db, faccio swipe e vado in FragB e la lista viene aggiornata. Se ora ripeto l'operazione, vado in FragA riaggiungo  un nome e rivado in FragB mi crasha col seguente errore:

Codice (Java): [Seleziona]
Caused by: java.lang.ClassCastException: viewpagersample.sample.tonno16.com.viewpagersample.Fragment.PlaceHolderFragment cannot be cast to viewpagersample.sample.tonno16.com.viewpagersample.Fragment.FragmentFilterContact
dove PlaceHolderFragment sarebbe A e FragmentFilterContact sarebbe B

Post unito: 28 Agosto 2014, 11:27:18 CEST
Aggiorno per dire che ho trovato una soluzione. Per chi fosse interessato esiste una libreria veramente utile:

https://github.com/greenrobot/EventBus

Si ha la possibilità di registrare ogni tipo di evento, o passare ogni tipo ti parametro da dove vuoi a dove vuoi in ogni punto del codice.

« Ultima modifica: 28 Agosto 2014, 11:27:18 CEST da tonno16, Reason: Merged DoublePost »