2013-06-02 10 views
6

Sto provando a utilizzare un'interfaccia per restituire i dati da DialogFragment a ArrayAdapter da cui viene visualizzato.Restituzione di dati da un DialogFragment a un adattatore

Ho letto qualcosa di simile here, ma non so come chiamare la funzione DialogFragment restituendo i dati.

Chiunque può aiutare?

MyDialog.java

public class MyDialog extends DialogFragment { 

    static interface Listener { 
     void returnData(int result); 
    } 

    /* ... */ 

    @Override 
    public void onActivityCreated (Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState);   

     mBtnSubmit.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // How can I call PCListAdapter.returnData ? 

       dismiss();    
      } 
     }); 
    } 

} 

PCListAdapter.java

public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener { 

    /* ... */ 

    public void showCommentDialog() { 

     FragmentManager fm = ((Activity)mContext).getFragmentManager(); 
     MyDialog dialog = new MyDialog(); 
     dialog.show(fm, "mydialog"); 
    } 

    @Override 
    public void returnData(int result) { 
    } 
} 

risposta

14

Il link che hai letto parla di comunicare il Frammento con l'attività (utilizzando ascoltatori). Questo è fatto perché il Frammento è strettamente associato all'attività. Ora nel tuo caso dal momento che stai usando Adapter per lanciare un Fragment, probabilmente lo potresti fare.

public class MyDialog extends DialogFragment { 

private Listener mListener; 

public void setListener(Listener listener) { 
    mListener = listener; 
} 

static interface Listener { 
    void returnData(int result); 
} 

/* ... */ 

@Override 
public void onActivityCreated (Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState);   

    mBtnSubmit.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (mListener != null) { 
       mListener.returnData(data); 
      } 

      dismiss();    
     } 
    }); 
} 
} 

e per l'adattatore,

public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener { 

/* ... */ 

public void showCommentDialog() { 

    FragmentManager fm = ((Activity)mContext).getFragmentManager(); 
    MyDialog dialog = new MyDialog(); 
    dialog.setListener(PCListAdapter.this); 
    dialog.show(fm, "mydialog"); 
} 

@Override 
public void returnData(int result) { 
} 
} 
+0

Questo non funziona, la linea dialog.setListener (questo) non è valido. – zeeshan

+0

Ho esattamente lo stesso problema con errore in dialog.setListener (this). Qualche soluzione? –

+0

in realtà l'ho risolto ora. Basta non mettere questa riga direttamente dentro mBtnSubmit.setOnClickListener –

Problemi correlati