2013-06-02 25 views
6

Próbuję użyć interfejsu do zwrócenia danych z DialogFragment do ArrayAdapter, z którego jest on wyświetlany.Powracanie danych z DialogFragment do adaptera

Przeczytałem coś podobnego here, ale nie wiem jak wywołać w DialogFragment funkcji zwracania danych.

Ktoś może pomóc?

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) { 
    } 
} 

Odpowiedz

14

Link przeczytaniu rozmowy o komunikacji Fragment z aktywnością (używając słuchaczy). Dzieje się tak, ponieważ Fragment jest ściśle powiązany z Aktywnością. Teraz w twoim przypadku, ponieważ używasz Adaptera do uruchomienia Fragmentu, prawdopodobnie możesz to zrobić.

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

i adapterem,

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

ten nie działa, linia dialog.setListener (this) jest nieprawidłowy. – zeeshan

+0

Mam dokładnie ten sam problem z błędem w oknie dialogowym dialog.setListener (this). Jakieś rozwiązanie? –

+0

faktycznie rozwiązałem to teraz. Po prostu nie umieszczaj tej linii bezpośrednio w mBtnSubmit.setOnClickListener –