【问题标题】:Return values from DialogFragment从 DialogFragment 返回值
【发布时间】:2015-12-30 18:48:52
【问题描述】:

我正在执行单击EditText 后需要显示对话框的任务。在该对话框中,我使用RecyclerView 显示带有RadioButtons 的内容。

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

为了生成一个对话框,我使用了DialogFragment。

由于我是 android 开发新手,我完全糊涂了,无法找到解决方案。

【问题讨论】:

  • 发布您的问题代码..
  • @Mohit 实际上,代码没有错误,我无法弄清楚如何实现。
  • 我的类为 ldDialog.java, ldListAdapter.java 并且显示对话框的代码是“ editTextLeadSource.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { launchDialog( "LeadSource"); } });"

标签: android android-recyclerview android-dialogfragment


【解决方案1】:

因为您的对话框是 DialogFragment,所以您可以使用两件事

  1. 如果您从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 开发者网站上查看example。

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

    MyDialog dialog = new MyDialog();
    dialog.setTargetFragment(this, Constants.DIALOG_REQUEST_CODE);
    dialog.show(fragmentManager, Constants.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
                }
            }
        }
    }     
    

【讨论】:

  • 我怎样才能将点击事件设置为该对话框内的recyclerview的内容,以便在该点击事件中我获得值并设置为Edittextview。??
  • 如果你需要一个点击监听器来监听 RecyclerView 的行,你可以使用this 之类的东西。行内视图的类似设置侦听器或使用具有 277 次投票的答案here。
  • 谢谢哥们,我会试试这个解决方案...@Marko
  • 还有一件事,你获取值的代码,我应该将它添加到 onClick 事件中吗?
  • 哪个例子,第二个?您必须在 Fragment 中覆盖 onActivityResult 方法,并且该值将自动返回。如果要在onClick中返回值,则必须调用getTargetFragment().onActivityResult()...返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
相关资源
最近更新 更多