java - DialogFragment 将 onClick 结果返回到 MainActivity

标签 java android android-dialogfragment

这个问题已经被问过并回答了至少十几次,但我仍然无法继续下去。我已经尝试了 4 个或更多列出的答案,但没有收到错误,只是没有返回结果。这是我尝试过的最新代码。我真的希望这个解决方案能够发挥作用,因为它对我来说最具可读性。

欢迎任何建议,谢谢。

主要 Activity

...
private void showAlertDialog() {
    FragmentManager fm = getSupportFragmentManager();
    MyAlertDialogFragment alertDialog = 
    MyAlertDialogFragment.newInstance("Some title");
    alertDialog.setTargetFragment(alertDialog, 1);
    alertDialog.show(fm, "fragment_alert");
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intentdata)
{
    // Stuff to do, dependent on requestCode and resultCode
    if(requestCode == 1)  // 1 is an arbitrary number, can be any int
    {
        // This is the return result of your DialogFragment
        if(resultCode == 1) // 1 is an arbitrary number, can be any int
        {
            Toast.makeText(MainActivity.this, "result received",
            Toast.LENGTH_SHORT).show();
            Log.d("onActivityResult", "result received" + resultCode);
        }
    }
}

MyDialogFragment

...
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;

...

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    String title = getArguments().getString("title");
    AlertDialog.Builder alertDialogBuilder = new
    AlertDialog.Builder(getActivity());
    alertDialogBuilder.setTitle(title);
    alertDialogBuilder.setMessage("Are you sure?");
    alertDialogBuilder.setPositiveButton("OK",  new 
    DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // on success
        }
    });
    alertDialogBuilder.setNegativeButton("Cancel", new
    DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            getTargetFragment().onActivityResult(getTargetRequestCode(), 
            1, getActivity().getIntent());
            dialog.dismiss();
        }
    });

    return alertDialogBuilder.create();
}

最佳答案

我找到了它,在我的 MainActivity 中添加了一个 onDialogOKPressed 方法,并将其放入对话框的 onClick ((MainActivity)(MyAlertDialogFragment.this.getActivity())).onDialogOKPressed();

所以现在看起来像这样

MyDialogFragment

...
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    String title = getArguments().getString("title");
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
    alertDialogBuilder.setTitle(title);
    alertDialogBuilder.setMessage("Are you sure?");
    alertDialogBuilder.setPositiveButton("OK",  new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // on success
            ((MainActivity)(MyAlertDialogFragment.this.getActivity())).onDialogOKPressed();
        }
    });
    alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            getTargetFragment().onActivityResult(getTargetRequestCode(), 1, getActivity().getIntent());
            dialog.dismiss();
        }
    });

    return alertDialogBuilder.create();
}

主要 Activity

...
public void onDialogOKPressed () {
    // Stuff to do, dependent on requestCode and resultCode
    Toast.makeText(MainActivity.this, "OK pressed", Toast.LENGTH_SHORT).show();
}

关于java - DialogFragment 将 onClick 结果返回到 MainActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33378531/

相关文章:

android - 如何显示全角 DialogFragment?

java - 根据另一个 ArrayList 在 ArrayList 中查找特定条目?

java - 如何在 Android 应用程序中显示字符串?

java - 部署 Play Framework 无法找到或加载主类

android - Skobbler Android 3.0.1 requestScreenshot 返回透明空位图

java - 是否可以在同一 Activity 中执行单独的网络线程而无需等待?

android - 在 android 中显示键盘时不调整 DialogFragment 的大小

android - DialogFragment设置Dialog的高度

Java 编程 - 如何在数字格式后添加文本?

java - 如何使用 Selenium WebDriver 验证元素中是否存在属性?