当前位置:  开发笔记 > Android > 正文

从DialogFragment返回值

如何解决《从DialogFragment返回值》经验,为你挑选了1个好方法。

我正在做的任务,我需要在点击后显示一个对话框EditText.在该对话框中,我使用RadioButtons 显示内容RecyclerView.

现在,我想要做的是,在从对话框中选择RadioButton(在RecyclerView中的内容)之后,它应该返回该内容的值,然后应该关闭对话框.

为了生成一个对话框我用了一个DialogFragment.

由于我是android开发的新手,我完全感到困惑,无法找到解决方案.



1> Marko..:

因为你的对话框是一个DialogFragment你可以使用两件事

    如果从a启动对话框Activity,则可以使用界面

创建一个接口

public interface ISelectedData {
    void onSelectedData(String string);
}

在您的Activity中实现一个接口

public class MyActivity implements ISelectedData {

    .....

    @Override 
    public void onSelectedData(String myValue) {
        // Use the returned value
    }
}

在对话框中,将界面附加到您的活动

private ISelectedData mCallback;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        mCallback = (ISelectedData) activity;
    }
    catch (ClassCastException e) {
        Log.d("MyDialog", "Activity doesn't implement the ISelectedData interface");
    }
}

将值返回到Activity时,只需在Dialog中调用即可

mCallback.onSelectedData("myValue");

查看Android开发者网站上的示例.

    如果从a启动对话框Fragment,则可以使用setTargetFragment(...)

启动对话框

MyDialog dialog = new MyDialog();
dialog.setTargetFragment(this, Constants.DIALOG_REQUEST_CODE);
dialog.show(fragmentManager, Constants.DIALOG);

从Dialog返回值

Bundle bundle = new Bundle();
bundle.putString(Constants.MY_VALUE, "MyValue");

Intent intent = new Intent().putExtras(bundle);

getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);

dismiss();

在Fragment中获取值

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == Constants.DIALOG_REQUEST_CODE) {

        if (resultCode == Activity.RESULT_OK) {

            if (data.getExtras().containsKey(Constants.MY_VALUE)) {

                String myValue = data.getExtras().getString(Constants.MY_VALUE);

                // Use the returned value
            }
        }
    }
}     

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有