настраиваемое диалоговое окно оповещения не закрывается - PullRequest
0 голосов
/ 27 февраля 2019

Я создал пользовательский диалог, в котором я надуваю диалоговое окно с пользовательским макетом, здесь диалоговое окно успешно отображается, но когда я пытаюсь закрыть диалоговое окно, ничего не происходит, я пытался объявить диалог как окончательный, но это не такПомогите.

Пожалуйста, посмотрите на мой код:

final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
                            LayoutInflater inflater = getActivity().getLayoutInflater();
                            final View dialogView = inflater.inflate(R.layout.fragment_itemdet, null);
                            dialogBuilder.setView(dialogView);

                            name=dialogView.findViewById(R.id.itemname);
                            img=dialogView.findViewById(R.id.itemdetimg);
                            counter=dialogView.findViewById(R.id.counter);
                            add=dialogView.findViewById(R.id.add);
                            del=dialogView.findViewById(R.id.sub);
                            confirm=dialogView.findViewById(R.id.confirm);
                            Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(),  "fonts/Poppins-ExtraBoldItalic.ttf");
                            name.setTypeface(custom_font);
                            final AlertDialog alertDialog = dialogBuilder.create();
                            add.setOnClickListener(v -> counter.setText(String.valueOf(i++)));
                            del.setOnClickListener(v -> counter.setText(String.valueOf(i--)));
                            name.setText(docname);
                            Glide.with(getContext()).load(url).into(img);
                            confirm.setOnClickListener(v->{
                                String qty=counter.getText().toString();
                                if (qty.equals("0")){
                                    Toast.makeText(getContext(),"Please Specify Quantity",Toast.LENGTH_LONG).show();
                                }
                                else {
                                    db=FirebaseFirestore.getInstance();
                                    db.collection("Order").document(TableListFragment.tableno)
                                            .update(
                                                    "Items", FieldValue.arrayUnion(docname),
                                                    "Quantity", FieldValue.arrayUnion(qty)
                                            ).addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                      Toast.makeText(getContext(),"Item Added",Toast.LENGTH_LONG).show();
                                            alertDialog.dismiss();
                                        }
                                    }).addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.i("WhatdFuck:",e.toString());
                                        }
                                    });

                                }
                            });
                            dialogBuilder.setTitle("Order");
                            dialogBuilder.setMessage("Enter Order Details");
                          final AlertDialog b = dialogBuilder.create();
                            b.show();
                        }
                    });

Ответы [ 7 ]

0 голосов
/ 27 февраля 2019

Просто вам просто нужно использовать

 alertDialog.show();

вместо этих двух строк

final AlertDialog b = dialogBuilder.create();
                        b.show();
0 голосов
/ 27 февраля 2019

Заменить последние две строки кода.Когда вы создаете два экземпляра диалога и пытаетесь закрыть тот, который вы не показывали, это создает проблему.

        final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        final View dialogView = inflater.inflate(R.layout.fragment_itemdet, null);
        dialogBuilder.setView(dialogView);

        name = dialogView.findViewById(R.id.itemname);
        img = dialogView.findViewById(R.id.itemdetimg);
        counter = dialogView.findViewById(R.id.counter);
        add = dialogView.findViewById(R.id.add);
        del = dialogView.findViewById(R.id.sub);
        confirm = dialogView.findViewById(R.id.confirm);
        Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Poppins-ExtraBoldItalic.ttf");
        name.setTypeface(custom_font);
        final AlertDialog alertDialog = dialogBuilder.create();
        add.setOnClickListener(v -> counter.setText(String.valueOf(i++)));
        del.setOnClickListener(v -> counter.setText(String.valueOf(i--)));
        name.setText(docname);
        Glide.with(getContext()).load(url).into(img);
        confirm.setOnClickListener(v -> {
            String qty = counter.getText().toString();
            if (qty.equals("0")) {
                Toast.makeText(getContext(), "Please Specify Quantity", Toast.LENGTH_LONG).show();
            } else {
                db = FirebaseFirestore.getInstance();
                db.collection("Order").document(TableListFragment.tableno)
                        .update(
                                "Items", FieldValue.arrayUnion(docname),
                                "Quantity", FieldValue.arrayUnion(qty)
                        ).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(getContext(), "Item Added", Toast.LENGTH_LONG).show();
                        alertDialog.dismiss();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.i("WhatdFuck:", e.toString());
                    }
                });

            }
        });
        dialogBuilder.setTitle("Order");
        dialogBuilder.setMessage("Enter Order Details");


         alertDialog.show();
0 голосов
/ 27 февраля 2019

Попробуйте закрыть диалог в потоке пользовательского интерфейса

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    alertDialog.dismiss();
                }
            });
0 голосов
/ 27 февраля 2019

Проблема в том, что вы вызываете dialogBuilder.create в двух разных местах, а экземпляр alertDialog никогда не отображается.

Удаление строк:

...b = dialogBuilder.create();
b.show();

И добавление в том же месте:

alertDialog.show();

Также вы должны исправить порядок всего, чтобы он работал правильно.

  • экземплярный строитель
  • добавление параметров в строитель
  • создать диалог, вызвав dialogBuilder.create ()
  • создать прослушиватель кликов после наличия экземпляра диалога
  • показать диалог
0 голосов
/ 27 февраля 2019

Попробуйте этот код

final Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.fragment_itemdet);

        dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        dialog.getWindow().setGravity(Gravity.CENTER);
        dialog.show();
                            name=dialog.findViewById(R.id.itemname);
                            img=dialog.findViewById(R.id.itemdetimg);
                            counter=dialog.findViewById(R.id.counter);
                            add=dialog.findViewById(R.id.add);
                            del=dialog.findViewById(R.id.sub);
                            confirm=dialog.findViewById(R.id.confirm);
                            Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(),  "fonts/Poppins-ExtraBoldItalic.ttf");
                            name.setTypeface(custom_font);
 add.setOnClickListener(v -> counter.setText(String.valueOf(i++)));
                            del.setOnClickListener(v -> counter.setText(String.valueOf(i--)));
                            name.setText(docname);
                            Glide.with(getContext()).load(url).into(img);
                            confirm.setOnClickListener(v->{
                              dialog.dismiss();
                                String qty=counter.getText().toString();
                                if (qty.equals("0")){
                                    Toast.makeText(getContext(),"Please Specify Quantity",Toast.LENGTH_LONG).show();
                                }
                                else {
                                    db=FirebaseFirestore.getInstance();
                                    db.collection("Order").document(TableListFragment.tableno)
                                            .update(
                                                    "Items", FieldValue.arrayUnion(docname),
                                                    "Quantity", FieldValue.arrayUnion(qty)
                                            ).addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                      Toast.makeText(getContext(),"Item Added",Toast.LENGTH_LONG).show();
                                            alertDialog.dismiss();
                                        }
                                    }).addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.i("WhatdFuck:",e.toString());
                                        }
                                    });

                                }
                            });

                        }
                    });
0 голосов
/ 27 февраля 2019

Вы также можете использовать Dialog вместо AlertDialog.Builder, как показано ниже.Вы также можете настроить это как;

     final Dialog dialog = new Dialog(MyFirebaseMessagingService.this);
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     dialog.setContentView(R.layout.alert_my_tasks);
     dialog.setCancelable(true);

     TextView tv_msg = dialog.findViewById(R.id.tv_msg);
     TextView tv_reachedLoc = dialog.findViewById(R.id.tv_reachedLoc);

     tv_msg .setText("");

     tv_reachedLoc.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                   // dismiss dialog
                                    dialog.dismiss();

                                   // do your task here

                                }
                            });

  dialog.show();
  }
0 голосов
/ 27 февраля 2019

Переместите alertDialog.dismiss(); выше if (qty.equals("0")){ следующим образом:

alertDialog.dismiss();
if (qty.equals("0")){...

Обновление

Проблема возникла из-за того, что вы показываете другой диалог (b) и закрытие другого диалога (alertDialog):

b и alertDialog - это разные диалоги, поэтому замените эти две строки:

final AlertDialog b = dialogBuilder.create();
                            b.show();

только на это:

alertDialog.show();

внизу вашего кода.

...