2013-06-02 12 views
6

私はDialogFragmentからArrayAdapterにデータを返すためにインターフェイスを使用しようとしています。DialogFragmentからアダプタにデータを返す

hereのようなものを読んだことがありますが、データを返す関数DialogFragmentを呼び出す方法はわかりません。

誰でも助けることができますか?

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

答えて

14

あなたが(リスナーを使用して)活動とのフラグメントを通信に関する協議を読んだリンク。これは、フラグメントがアクティビティに密接に結合されているために行われます。アダプタを使用してフラグメントを起動しているので、今の場合、これはおそらく可能です。

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

とアダプタについて、

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

これは動作しません、ラインdialog.setListenerは(この)は無効です。 – zeeshan

+0

私はdialog.setListener(this)でエラーとまったく同じ問題を抱えています。どんな解決策ですか? –

+0

実際に私は今それを解決しました。この行をmBtnSubmit.setOnClickListenerの中に直接入れないでください –

関連する問題