android - 将数据从 DialogFragment 返回到适配器

标签 android interface adapter dialogfragment

我正在尝试使用接口(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/

相关文章:

android - android中的吉他音高检测

android - ZBar Android 扫描本地二维码或条形码图像

string - panic : interface conversion: interface {} is **string, 不是字符串

java - Java 9 中接口(interface)方法的默认访问修饰符?

android - ListView 不会在 notifyDataSetChanged 上刷新

android - Facebook 登录 sdk 在发布应用程序 android 中不起作用

Android ImageView 将 srcCompact 绑定(bind)到 bool 变量

java - 为什么 Eclipse 在接口(interface)方法上提示 @Override?

安卓:notifyDataSetChanged();不工作

android - 从 Adapter + ListView 打开时出现对话框错误