我正在尝试使用界面将数据从DialogFragment
返回到显示它的ArrayAdapter
。
我读过类似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) {
}
}
答案 0 :(得分:14)
您阅读的链接谈到了将片段与活动进行通信(使用监听器)。这样做是因为Fragment与Activity紧密耦合。现在在你的情况下,因为你使用适配器来启动片段,你可以这样做。
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) {
}
}