2013-06-02 25 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

您已經閱讀有關(使用監聽器)與活動通信的片段會談的鏈接。這是因爲Fragment與活動緊密相關。現在在你的情況下,因爲你使用Adapter來啓動一個Fragment,所以你可以這麼做。

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 –

相關問題