DialogFragment将onClick结果返回给MainActivity(DialogFragment return onClick result to MainActivity)

编程入门 行业动态 更新时间:2024-10-10 00:21:21
DialogFragment将onClick结果返回给MainActivity(DialogFragment return onClick result to MainActivity)

这已经被问及至少十几次回答,但我仍然无法得到我的。 我已经尝试了4个或更多列出的答案并且没有错误,结果根本就没有返回。 这是我尝试过的最新代码。 我真的希望这个解决方案能够工作,因为它对我来说是最易读的。

我欢迎任何建议,谢谢。

主要活动

... 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(); }

This has been asked and answered at least a dozen times yet I still can't get mine going. I've tried 4 or more of the listed answers and get no errors, a result simply isn't returned. here's the most recent code that I've tried. I really wanted this solution to work because it was the most readable to me.

I welcome any suggestions, Thanks.

MainActivity

... 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(); }

主要活动

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

I found it, added a onDialogOKPressed method to my MainActivity and put this inside the onClick of my dialog ((MainActivity)(MyAlertDialogFragment.this.getActivity())).onDialogOKPressed();

so now it looks like this

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(); }

MainActivity

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

更多推荐

本文发布于:2023-08-02 08:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1372749.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:onClick   DialogFragment   MainActivity   result   return

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!