碎片警报框的问题

时间:2016-02-29 13:47:10

标签: android xml android-fragments android-dialogfragment

我目前正在尝试构建一个简单的设置片段警告框。

我已经构建了警告框的主体,但是我注意到没有使用实际的Dialog方法。此外,此Dialog方法替换了public PartialViewResult LoadSelectedCustomerView(string clinicName, List<MyObject> dictionaryVal) { foreach(var item in dictionaryVal){} } 方法。

我如何实际使用Dialog方法?我创建Dialog方法之后似乎无法简单地调用它,因为它出现了错误。

我是否必须在某些XML中引用它? 如果是这样,那么哪个XML - 片段的XML或其父Activity的XML?

以下是我的Dialog Fragment的代码。我还没有修改它的XML。

onCreate()

4 个答案:

答案 0 :(得分:1)

公共静态类MyAlertDialogFragment扩展了DialogFragment {

        public static MyAlertDialogFragment newInstance(int title) {
            MyAlertDialogFragment frag = new MyAlertDialogFragment();
            Bundle args = new Bundle();
            args.putInt("title", title);
            frag.setArguments(args);
            return frag;
        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            int title = getArguments().getInt("title");

            return new AlertDialog.Builder(getActivity())
                    .setIcon(R.drawable.alert_dialog_icon)
                    .setTitle(title)
                    .setPositiveButton(R.string.alert_dialog_ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                ((FragmentAlertDialog)getActivity()).doPositiveClick();
                            }
                        }
                    )
                    .setNegativeButton(R.string.alert_dialog_cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                ((FragmentAlertDialog)getActivity()).doNegativeClick();
                            }
                        }
                    )
                    .create();
        }
    }

           public void showDialog() {
                DialogFragment newFragment = MyAlertDialogFragment.newInstance(
                        R.string.alert_dialog_two_buttons_title);


      newFragment.show(getFragmentManager(), "dialog");
        }



          public void doPositiveClick() {
                // Do stuff here.
                Log.i("FragmentAlertDialog", "Positive click!");
            }

    public void doNegativeClick() {
        // Do stuff here.
        Log.i("FragmentAlertDialog", "Negative click!");
    }


The activity creating this fragment may have the above methods to show the dialog and receive results from it, This is how you can define your dialog using dialog fragment and get the call backs in your project.

希望这会对你有所帮助。

答案 1 :(得分:1)

通常,您是DialogFragment的子类。要启动它,您可以实例化对话框片段并调用它的show方法。

new ExceedingLimitFragment().show(getFragmentManager(), TAG);

注意:您应该使用getFragmentManager()或getSupportFragmentManager(),具体取决于您子类化的DialogFragment版本(android.app.DialogFragment或android.support.v4.app.DialogFragment)

答案 2 :(得分:1)

您可以创建方法showDialog()并将此代码放入其中..这是如何使用两个选项创建一个简单的警报对话框,或取消

 new AlertDialog.Builder(context)
        .setTitle("Add title ")
        .setMessage("Add some message")
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 

            }
         })
        .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 

            }
         })
        .setIcon(android.R.drawable.ic_dialog_alert)
         .show();
希望能帮到你!

答案 3 :(得分:1)

我注意到上述代码的一些问题。 拳头:

public Dialog onCreateDialogExceed (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

似乎错了。您应该只调用要覆盖的方法的super方法。在这种情况下,onCreateDialogExceed是您自己的方法,因此您应该调用onCreate()。系统依赖于您在覆盖它们之后立即调用这些方法,以便它知道它们已按正确顺序调用。

ExceedingLimitFragment需要显示DialogFragment还是DialogFragment?如果答案是后者,请确保扩展该类而不是Fragment。执行此操作后,将onCreateDialogExceed()重命名为onCreateDialog(),当实际需要创建对话框时,系统将调用该文件。

为了显示对话框片段,您需要从Activity或片段中引用它,并执行以下操作:

new ExceedingLimitFragment().show(getFragmentManager(), TAG);

与@ dev.bmax的回答一样

至于您的标题,finish()Activity的方法。片段或DialogFragments都不知道它,所以你的IDE抱怨它是有道理的。为了在片段内部使用它,请确保

if(isAttached(){
   getActivity.finish();
}