Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DialogFragment将onClick结果返回到MainActivity_Java_Android_Android Dialogfragment - Fatal编程技术网

Java DialogFragment将onClick结果返回到MainActivity

Java DialogFragment将onClick结果返回到MainActivity,java,android,android-dialogfragment,Java,Android,Android Dialogfragment,这个问题已经被问了十几次了,但我仍然无法继续我的问题。我尝试了4个或更多列出的答案,但没有出现错误,结果根本就没有返回。这是我尝试过的最新代码。我真的希望这个解决方案能起作用,因为它对我来说是最具可读性的 我欢迎任何建议,谢谢 主要活动 MyDialogFragment 我找到了它,在我的MainActivity中添加了一个ondialogkPressed方法,并将其放入对话框((MainActivity)(MyAlertDialogFragment.this.getActivity()).on

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

我欢迎任何建议,谢谢

主要活动

MyDialogFragment


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

所以现在看起来像这样

MyDialogFragment

主要活动


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

所以现在看起来像这样

MyDialogFragment

主要活动


getTargetFragment()
方法在哪里?我认为它只是内置的,我没有在任何地方重写它。看看这个答案中的代码:我现在就开始了。不确定它是否正确,但它可以工作,我将其作为答案发布。
getTargetFragment()
方法在哪里?我认为它只是内置的,我没有在任何地方重写它。看看这个答案中的代码:我现在就开始了。不确定它是否合适,但它有效,我将其作为答案发布。
...
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);
        }
    }
}
...
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();
}
...
@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();
}
...
public void onDialogOKPressed () {
    // Stuff to do, dependent on requestCode and resultCode
    Toast.makeText(MainActivity.this, "OK pressed", Toast.LENGTH_SHORT).show();
}