从DialogFragment返回值

San*_*are 3 android android-dialogfragment android-recyclerview

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

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

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

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

Mar*_*rko 21

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

  1. 如果从a启动对话框Activity,则可以使用界面
  • 创建一个接口

    public interface ISelectedData {
        void onSelectedData(String string);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在您的Activity中实现一个接口

    public class MyActivity implements ISelectedData {
    
        .....
    
        @Override 
        public void onSelectedData(String myValue) {
            // Use the returned value
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在对话框中,将界面附加到您的活动

    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");
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 将值返回到Activity时,只需在Dialog中调用即可

    mCallback.onSelectedData("myValue");
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    MyDialog dialog = new MyDialog();
    dialog.setTargetFragment(this, Constants.DIALOG_REQUEST_CODE);
    dialog.show(fragmentManager, Constants.DIALOG);
    
    Run Code Online (Sandbox Code Playgroud)
  • 从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();
    
    Run Code Online (Sandbox Code Playgroud)
  • 在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
                }
            }
        }
    }     
    
    Run Code Online (Sandbox Code Playgroud)