2013-06-02 57 views
6

Tôi đang cố sử dụng giao diện để trả lại dữ liệu từ DialogFragment đến số ArrayAdapter mà từ đó dữ liệu được hiển thị.Trả lại dữ liệu từ hộp thoại DialogFragment sang Bộ điều hợp

Tôi đã đọc một cái gì đó tương tự here, nhưng tôi không biết cách gọi hàm DialogFragment trả về dữ liệu.

Bất kỳ ai cũng có thể trợ giúp?

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

Trả lời

14

Các liên kết mà bạn đã đọc các cuộc đàm phán về trao đổi các Fragment với Hoạt động (sử dụng Thính giả). Điều này được thực hiện bởi vì Fragment được kết hợp chặt chẽ với Activity. Bây giờ trong trường hợp của bạn kể từ khi bạn đang sử dụng Adapter để khởi động một Fragment, điều này là bạn có thể có thể làm.

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

và cho Adapter,

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

này không hoạt động, dòng dialog.setListener (này) là không hợp lệ. – zeeshan

+0

Tôi có cùng một vấn đề với lỗi tại dialog.setListener (điều này). Bất kì giải pháp nào? –

+0

thực sự tôi đã giải quyết nó ngay bây giờ. Chỉ cần không đặt dòng này trực tiếp bên trong mBtnSubmit.setOnClickListener –