jul*_*jul 8 android interface adapter dialogfragment
我正在尝试使用一个接口将数据从a返回DialogFragment到ArrayAdapter它所显示的数据.
我在这里读过类似的东西,但我不知道如何调用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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
Sag*_*are 14
您阅读的链接谈到了将Fragment与Activity进行通信(使用Listeners).这样做是因为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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
和适配器,
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) {
}
}
Run Code Online (Sandbox Code Playgroud)