Установить рисование в AlertDialog с AppCompatCheckedTextView - PullRequest
0 голосов
/ 15 октября 2018

Я создал диалоговое окно с предупреждением, в котором пользователю предлагается выбрать из списка страну.Я использую AppCompatCheckedTextView setCompundDrawablesWithIntrinsicBounds, чтобы установить флаг для рисования и выбрать точку.Он отлично работает, когда на широком экране / на телефоне установлен размер экрана по умолчанию, но когда на маленьком экране / большом размере дисплея значок не совпадает с тем, что должен (некоторые параметры даже отсутствуют)

default display size display size = largest

imgViewCountry.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // custom dialog
                    final ArrayList<DOItemValueSet> itemValueSets = new ArrayList<>(countryList.values());
                    final AlertDialog.Builder builder
                            = EBDialog.singleChoiceDialog(TemplateActivity.this, itemValueSets, EBApp.getEBResources().getString(R.string.ChooseCountry),
                            countryList.get(viewModel.getCountryCode()).toString());
                    builder.setPositiveButton(EBApp.getEBResources().getString(R.string.Ok), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            ListView lw = ((AlertDialog) dialog).getListView();
                            updateCountry(itemValueSets.get(lw.getCheckedItemPosition()).getValue());
                            refreshCurrentFragment();
                            refreshUI();
                            dltMainDrawer.closeDrawer(GravityCompat.START);

                        }
                    });
                    Dialog dialog = builder.create();
                    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                        @Override
                        public void onShow(DialogInterface dialog) {
                            ListView lw = ((AlertDialog) dialog).getListView();
                            for (int i = 0; i < lw.getChildCount(); i++) {
                                AppCompatCheckedTextView checkedTextView = (AppCompatCheckedTextView) lw.getChildAt(i);
                                checkedTextView.setCompoundDrawablesWithIntrinsicBounds(
                                        itemValueSets.get(i).getIcon(),
                                        null,
                                        checkedTextView.getCompoundDrawables()[0],
                                        null
                                );
                            }
                        }
                    });

                    dialog.show();

                }
            }
    );

Я не уверен, где я ошибся в своем коде?или я не должен использовать этот метод для создания этого представления?

! Редактировать - Добавление пользовательского диалогового кода -

public static AlertDialog.Builder choiceDialog(Context context, List list, String title, CharSequence currentSelected, boolean[] selectedArr, int mode, DialogInterface.OnMultiChoiceClickListener multiChoiceClickListener) {

    AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme);
    if (mode == 1) {
        int selectedIndex = 0;
        CharSequence[] array = new CharSequence[list.size()];
        for (int i = 0; i < list.size(); i++) {
            array[i] = list.get(i).toString();
            if (array[i].toString().equalsIgnoreCase(currentSelected.toString())) {
                selectedIndex = i;
            }
        }
        builder.setSingleChoiceItems(array, selectedIndex, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
    } else if (mode == 2) {
        CharSequence[] array = new CharSequence[list.size()];
        for (int i = 0; i < list.size(); i++) {
            array[i] = list.get(i).toString();
        }
        builder.setMultiChoiceItems(array, selectedArr, multiChoiceClickListener);
    }
    builder.setNegativeButton(EBApp.getEBResources().getString(R.string.Cancel), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
        }
    });

    builder.setCustomTitle(getCustomDialogTitle(context, title));
    return builder;
}
...