Выбор всплывающего окна для показа статистики

В процессе работы приложения собирается некая статистика, которая должна выводиться в отдельные таблицы. И открываться в отдельном окне. Я правильно понимаю, что для этого используем AlertDialog? Или есть какие-то иные, лучшие средства? В окне находится:

  • 6 listview (видны всегда только 2, зависит от некоторых параметров работы, выводится только нужная информации)
  • несколько текстовых записей
  • 2 кнопки

Ответы (1 шт):

Автор решения: Andrew

Я бы советовал посмотреть в сторону двух возможных вариантов:

  1. Dialog/AlertDialog со своей разметкой
  2. DialogFragment

Суть Dialog/AlertDialog в том что вы сможете его вызывать из активности например и он будет находится в пределах активности. Ему будут доступны все переменные объявленные в классе, методы и другие ресурсы. Но мне кажется что это будет не совсем правильно использовать такое лаконичное решение для всей информации которую вы представили в вопросе. Тем не менее ниже я привожу код для создания Dialog/AlertDialog:

public class ViewDialog {

    public void showDialog(Activity activity) {
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.newcustom_layout);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

        FrameLayout mDialogNo = dialog.findViewById(R.id.frmNo);
        mDialogNo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"Cancel" ,Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });

        FrameLayout mDialogOk = dialog.findViewById(R.id.frmOk);
        mDialogOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"Okay" ,Toast.LENGTH_SHORT).show();
                dialog.cancel();
            }
        });

        dialog.show();
    }
}

и вызываете данный класс где вам нужно:

ViewDialog alert = new ViewDialog();
    alert.showDialog(CustomDialogActivity.this);

так же в метод можно передать и другие параметры, либо переместить тело метода в активность. Второй вариант - использовать dialogfragment как показано в этом примере. С одной стороны DialogFragment хуже потому что туда нужно будет передать ваши данные, если у него не будет доступа к ресурсам на устройстве. С другой стороны обычный диалог это как мне кажется слишком просто для того что вам нужно. В любом случае эти два предложенные варианта в состоянии решить вашу проблему.

→ Ссылка