Кнопки исчезают из DialogFragment, когда отображаемый список требует прокрутки.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Кнопки исчезают из DialogFragment, когда отображаемый список требует прокрутки.

Сообщение Anonymous »

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

Я вижу, что в прошлые годы этот вопрос задавался (он по сути идентичен моему (Кнопки DialogFragment вытеснены за пределы экранного API 24 и выше), но все ответы казались удачными, даже случайными: установка Layout_weight, переключение с setMessage() на setTitle() и, наконец, переключение с AlertDialog на Dialog .

Ни один из них у меня не работает, и отказ от AlertDialog НЕ является привлекательным вариантом, потому что я использую метод setMultiChoiceItems(), который кажется (невероятным для меня, возможно, учитывая мои крайне ограниченные знания) доступен только для AlertDialog.

Поэтому в отчаянии и разочаровании я обращаюсь непосредственно к коллективному мозгу stackoverflow.

Это урезанная версия моего DialogFragment:

Код: Выделить всё

public class SurfaceDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.surface_dialog, null))
.setTitle(mMessage)
.setMultiChoiceItems(mSurfaceList, mCheckedSurfaces, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
mCheckedSurfacesPositions.add(which);
} else {
mCheckedSurfacesPositions.remove(mCheckedSurfacesPositions.indexOf(which));
}
}
});

// builder.setCancelable(false);
builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ProcessDialogSelections(mCheckedSurfacesPositions);
dismiss();
}

}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onSurfaceDialogSelectedSent(mUnitSurfaces);
dismiss();
}
});

return builder.create();
}
Это не сработало, поэтому я закодировал свои собственные кнопки и отобразил их:

Код: Выделить всё

    public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
View dialogView = inflater.inflate(R.layout.surface_dialog, null);
builder.setView(dialogView)
.setTitle(mMessage)

.setMultiChoiceItems(mSurfaceList, mCheckedSurfaces, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,  boolean isChecked) {
if (isChecked) {
mCheckedSurfacesPositions.add(which);
} else {
mCheckedSurfacesPositions.remove(mCheckedSurfacesPositions.indexOf(which));
}
}
});

Button positiveButton = dialogView.findViewById(R.id.positive_button);
Button negativeButton = dialogView.findViewById(R.id.negative_button);

positiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProcessDialogSelections(mCheckedSurfacesPositions);
dismiss();
}
});
negativeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onSurfaceDialogSelectedSent(mUnitSurfaces);
dismiss();
}
});

return builder.create();

}
и вот мой исправленный XML-файл
И поскольку ЭТО не сработало, я последовал совету Викаса Сингха (кнопки AlertDialog не отображаются при использовании пользовательского макета). Вот как выглядит новый код (по сути, макет создается на Java, а не на XML.

Код: Выделить всё

    public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

// New code from Vikas Singh
LinearLayout rootLayout = new LinearLayout(getActivity());
rootLayout.setOrientation(LinearLayout.VERTICAL);
ScrollView scrollView = new ScrollView(getActivity());
LinearLayout layout = new LinearLayout(getActivity());
layout.setOrientation(LinearLayout.VERTICAL);

scrollView.addView(layout);
rootLayout.addView(scrollView);
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("Go", null);
builder.setView(rootLayout);

builder//.setView(dialogView)
//.setTitle(mMessage)

.setMultiChoiceItems(mSurfaceList, mCheckedSurfaces, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
mCheckedSurfacesPositions.add(which);
} else {
mCheckedSurfacesPositions.remove(mCheckedSurfacesPositions.indexOf(which));
}
}
});
return builder.create();
}
По-прежнему нет кнопок при прокрутке.
Почему бы и что с этим поделать?

Подробнее здесь: https://stackoverflow.com/questions/590 ... -scrolling
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Достижение плавной прокрутки в EditText с помощью BottomSheetDialogFragment/DialogFragment
    Anonymous » » в форуме Android
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Элементы управления исчезают после прокрутки в Cwnd с помощью ScrollWindowEx.
    Anonymous » » в форуме C++
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Как обновить счетчик в DialogFragment
    Гость » » в форуме JAVA
    0 Ответы
    42 Просмотры
    Последнее сообщение Гость
  • Как обновить счетчик в DialogFragment
    Гость » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • Android: как закрыть DialogFragment при изменении ориентации?
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»