我正在尝试使用接口(interface)将数据从 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) {
}
}
最佳答案
您阅读的链接讨论了 fragment 与 Activity 的通信(使用监听器)。这样做是因为 Fragment 与 Activity 紧密耦合。现在在你的情况下,因为你正在使用适配器来启动 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) {
}
}
关于android - 将数据从 DialogFragment 返回到适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885870/