Как использовать диалог в классе фрагментов - PullRequest
0 голосов
/ 20 июня 2020

Я хотел бы, чтобы мое пользовательское всплывающее окно отображалось фрагментом. К сожалению, диалоговое окно «Объект» не относится к правильному макету. Как я могу указать правильный макет? Надеюсь, кто-нибудь сможет объяснить мне, где ошибка, и я смогу ее вызвать.

public class UserFragmentBestell<Textview> extends Fragment {
    
        RecyclerView recyclerView;
        TextView notfound;
        Dialog epicDialog;
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.user_fragment_bestell, container, false);
            recyclerView = view.findViewById(R.id.recyclerview_scroll);
            notfound = view.findViewById(R.id.user_order_notfound);
            getBestellungen();
            epicDialog = new Dialog(getActivity());
    
            return view;
    
        }
    
        
    
        public void callAction(int pId) {
            System.out.println(pId);
            epicDialog.setContentView(R.layout.user_popup_order_overview);
            epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            Button btn_order_overview_finish = (Button) epicDialog.findViewById(R.id.btn_order_overview_finish);
            //System.out.println(bestellung.get(position).getBestellnummer());
            btn_order_overview_finish.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    epicDialog.dismiss();
                }
    
            });
            epicDialog.show();
        }
    
    }

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Как предложил Абхинав, вы не должны создавать экземпляр Dialog напрямую. Для меня лучше всего сработало создание класса, расширяющего DialogFragment . Таким образом, когда я создаю экземпляр класса, мне нужно только вызвать метод show().

Пример в Kotlin:

class UnsavedChangesDialogFragment(private val listener: DialogInteractions) : DialogFragment() {

    interface DialogInteractions {
        fun onPositiveBtnPressed()
        fun onNegativeBtnPressed()
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            val builder = AlertDialog.Builder(it)
            builder
                .setMessage(R.string.changes_dialog_title)
                .setPositiveButton(R.string.changes_dialog_continue) { _, _ ->
                    listener.onPositiveBtnPressed()
                }
                .setNegativeButton(R.string.changes_dialog_back) {_, _ ->
                    listener.onNegativeBtnPressed()
                    dismiss()
                }

            builder.create()
        } ?: throw IllegalStateException("Activity cannot be null")
    }
}

Вы можете легко решить, что произойдет после нажатия положительной или отрицательной кнопки добавлением интерфейса. Таким образом, каждый фрагмент, в котором будет использоваться диалоговое окно, может выполнять различные действия после взаимодействия пользователя с диалоговым окном.

0 голосов
/ 20 июня 2020

документация предполагает, что вы не должны создавать экземпляр Dialog непосредственно, в вашем случае вместо этого используйте AlterDialog

   public void callAction(int pId){ // idk what you're doing with pid
    new AlertDialog.Builder(getActivity())
     .setMessage("message") //set the message on the dialog
     .setView(R.layout.user_popup_order_overview) // set layout as view of this dialog
     .setNegativeButton("cancel",null) // pressing cancel will dismiss this dialog
      }).create().show() // create and show this dialog;
   }

хорошего дня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...