Anonymous
Клавиатура не отображается в диалоговом окне нижнего листа
Сообщение
Anonymous » 08 окт 2024, 14:54
У меня возникла проблема с вложенным BottomSheetDialog в моем приложении для Android. Первый метод, showFilterBottomSheet(), создает BottomSheetDialog с такими фильтрами, как класс и раздел. На этом листе вы можете открыть другой BottomSheetDialog, используя метод showMultiSelectBottomSheet(), который содержит поиск EditText для фильтрации элементов. Проблема в том, что при появлении второго нижнего листа клавиатура не отображается при фокусировке на EditText (ID: searchEditText).
Код: Выделить всё
private void showFilterBottomSheet() {
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(FeeDefaulters.this);
View bottomSheetView = getLayoutInflater().inflate(R.layout.bottom_sheet_filters, null);
campusInputLayout = bottomSheetView.findViewById(R.id.campusInputLayout);
classInputLayout = bottomSheetView.findViewById(R.id.classInputLayout);
sectionInputLayout = bottomSheetView.findViewById(R.id.sectionInputLayout);
campusAutoCompleteTextView = bottomSheetView.findViewById(R.id.campusAutoCompleteTextView);
classAutoCompleteTextView = bottomSheetView.findViewById(R.id.classAutoCompleteTextView);
sectionAutoCompleteTextView = bottomSheetView.findViewById(R.id.sectionAutoCompleteTextView);
buttonApplyFilters = bottomSheetView.findViewById(R.id.buttonApplyFilters);
updateSelectedItemsText(campusAutoCompleteTextView, selectedCampuses);
updateSelectedItemsText(classAutoCompleteTextView, selectedClasses);
updateSelectedItemsText(sectionAutoCompleteTextView, selectedSections);
campusAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Campus", allCampuses, selectedCampuses, campusAutoCompleteTextView));
classAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Class", allClasses, selectedClasses, classAutoCompleteTextView));
sectionAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Section", allSections, selectedSections, sectionAutoCompleteTextView));
buttonApplyFilters.setOnClickListener(v -> {
Toast.makeText(FeeDefaulters.this, "Filters Applied", Toast.LENGTH_SHORT).show();
loadDataForTables();
bottomSheetDialog.dismiss();
});
bottomSheetDialog.setContentView(bottomSheetView);
bottomSheetDialog.show();
}
Код: Выделить всё
private void showMultiSelectBottomSheet(String filterType, List allItems, List selectedItems, TextView textViewToUpdate) {
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(FeeDefaulters.this);
View bottomSheetView = getLayoutInflater().inflate(R.layout.bottom_sheet_multiselect, null);
RecyclerView recyclerView = bottomSheetView.findViewById(R.id.recyclerViewMultiSelect);
Button buttonApplyMultiSelect = bottomSheetView.findViewById(R.id.buttonApplyMultiSelect);
ImageButton closebtn = bottomSheetView.findViewById(R.id.closebtn);
EditText searchEditText = bottomSheetView.findViewById(R.id.searchEditText);
CheckBox selectAllCheckbox = bottomSheetView.findViewById(R.id.selectAllCheckbox);
closebtn.setOnClickListener(v -> bottomSheetDialog.dismiss());
bottomSheetDialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN |
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE
);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
MultiSelectAdapter adapter = new MultiSelectAdapter(allItems, selectedItems);
recyclerView.setAdapter(adapter);
selectAllCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
adapter.selectAll(isChecked);
});
adapter.setOnSelectionChangedListener(selectedItemsCount -> {
selectAllCheckbox.setChecked(selectedItemsCount == allItems.size());
});
buttonApplyMultiSelect.setOnClickListener(v -> {
updateSelectedItemsText(textViewToUpdate, adapter.getSelectedItems());
bottomSheetDialog.dismiss();
});
bottomSheetDialog.setOnShowListener(dialogInterface -> {
BottomSheetDialog dialog = (BottomSheetDialog) dialogInterface;
FrameLayout bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);
if (bottomSheet != null) {
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
searchEditText.postDelayed(() -> {
InputMethodManager imm = (InputMethodManager) searchEditText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(searchEditText, InputMethodManager.SHOW_IMPLICIT);
}
searchEditText.requestFocus();
}, 1000);
});
// Search functionality
searchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) { }
});
bottomSheetDialog.setContentView(bottomSheetView);
bottomSheetDialog.show();
}
Я установил softInputMode с помощью SOFT_INPUT_ADJUST_RESIZE | SOFT_INPUT_STATE_VISIBLE, но, похоже, это не помогает. EditText получает фокус, но клавиатура не появляется.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... eet-dialog
1728388450
Anonymous
У меня возникла проблема с вложенным BottomSheetDialog в моем приложении для Android. Первый метод, showFilterBottomSheet(), создает BottomSheetDialog с такими фильтрами, как класс и раздел. На этом листе вы можете открыть другой BottomSheetDialog, используя метод showMultiSelectBottomSheet(), который содержит поиск EditText для фильтрации элементов. Проблема в том, что при появлении второго нижнего листа клавиатура не отображается при фокусировке на EditText (ID: searchEditText). [code]private void showFilterBottomSheet() { BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(FeeDefaulters.this); View bottomSheetView = getLayoutInflater().inflate(R.layout.bottom_sheet_filters, null); campusInputLayout = bottomSheetView.findViewById(R.id.campusInputLayout); classInputLayout = bottomSheetView.findViewById(R.id.classInputLayout); sectionInputLayout = bottomSheetView.findViewById(R.id.sectionInputLayout); campusAutoCompleteTextView = bottomSheetView.findViewById(R.id.campusAutoCompleteTextView); classAutoCompleteTextView = bottomSheetView.findViewById(R.id.classAutoCompleteTextView); sectionAutoCompleteTextView = bottomSheetView.findViewById(R.id.sectionAutoCompleteTextView); buttonApplyFilters = bottomSheetView.findViewById(R.id.buttonApplyFilters); updateSelectedItemsText(campusAutoCompleteTextView, selectedCampuses); updateSelectedItemsText(classAutoCompleteTextView, selectedClasses); updateSelectedItemsText(sectionAutoCompleteTextView, selectedSections); campusAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Campus", allCampuses, selectedCampuses, campusAutoCompleteTextView)); classAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Class", allClasses, selectedClasses, classAutoCompleteTextView)); sectionAutoCompleteTextView.setOnClickListener(v -> showMultiSelectBottomSheet("Section", allSections, selectedSections, sectionAutoCompleteTextView)); buttonApplyFilters.setOnClickListener(v -> { Toast.makeText(FeeDefaulters.this, "Filters Applied", Toast.LENGTH_SHORT).show(); loadDataForTables(); bottomSheetDialog.dismiss(); }); bottomSheetDialog.setContentView(bottomSheetView); bottomSheetDialog.show(); } [/code] [code] private void showMultiSelectBottomSheet(String filterType, List allItems, List selectedItems, TextView textViewToUpdate) { BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(FeeDefaulters.this); View bottomSheetView = getLayoutInflater().inflate(R.layout.bottom_sheet_multiselect, null); RecyclerView recyclerView = bottomSheetView.findViewById(R.id.recyclerViewMultiSelect); Button buttonApplyMultiSelect = bottomSheetView.findViewById(R.id.buttonApplyMultiSelect); ImageButton closebtn = bottomSheetView.findViewById(R.id.closebtn); EditText searchEditText = bottomSheetView.findViewById(R.id.searchEditText); CheckBox selectAllCheckbox = bottomSheetView.findViewById(R.id.selectAllCheckbox); closebtn.setOnClickListener(v -> bottomSheetDialog.dismiss()); bottomSheetDialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE ); recyclerView.setLayoutManager(new LinearLayoutManager(this)); MultiSelectAdapter adapter = new MultiSelectAdapter(allItems, selectedItems); recyclerView.setAdapter(adapter); selectAllCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> { adapter.selectAll(isChecked); }); adapter.setOnSelectionChangedListener(selectedItemsCount -> { selectAllCheckbox.setChecked(selectedItemsCount == allItems.size()); }); buttonApplyMultiSelect.setOnClickListener(v -> { updateSelectedItemsText(textViewToUpdate, adapter.getSelectedItems()); bottomSheetDialog.dismiss(); }); bottomSheetDialog.setOnShowListener(dialogInterface -> { BottomSheetDialog dialog = (BottomSheetDialog) dialogInterface; FrameLayout bottomSheet = dialog.findViewById(com.google.android.material.R.id.design_bottom_sheet); if (bottomSheet != null) { BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } searchEditText.postDelayed(() -> { InputMethodManager imm = (InputMethodManager) searchEditText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(searchEditText, InputMethodManager.SHOW_IMPLICIT); } searchEditText.requestFocus(); }, 1000); }); // Search functionality searchEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.filter(s.toString()); } @Override public void afterTextChanged(Editable s) { } }); bottomSheetDialog.setContentView(bottomSheetView); bottomSheetDialog.show(); } [/code] [img]https://i.sstatic.net/EDEgDCrZ.jpg[/img] Я установил softInputMode с помощью SOFT_INPUT_ADJUST_RESIZE | SOFT_INPUT_STATE_VISIBLE, но, похоже, это не помогает. EditText получает фокус, но клавиатура не появляется. Подробнее здесь: [url]https://stackoverflow.com/questions/79065836/keyboard-not-visible-in-bottom-sheet-dialog[/url]