Я пытаюсь добавить несколько переключателей в навигационный ящик.
Это то, что я пытался до сих пор:
activity_main_drawer.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:showIn="navigation_view">
<group
android:id="@+id/radio_button_group"
android:checkableBehavior="single"
android:visible="true">
<item
android:id="@+id/radio_buttonX-axis"
android:icon="@drawable/ic_x_axis"
android:title="Show x-axis"
app:actionViewClass="android.widget.RadioButton"/>
<item
android:id="@+id/radio_buttonY-axis"
android:icon="@drawable/ic_y_axis"
android:title="Show y-axis"
app:actionViewClass="android.widget.RadioButton" />
<item
android:id="@+id/radio_buttonZ-axis"
android:icon="@drawable/ic_z_axis"
android:title="Show z-axis"
app:actionViewClass="android.widget.RadioButton" />
</group>
</menu>
Ссылка это и это ответы.
Способ 1. Добавление группы радиосвязи после создания кнопок радиосвязи
Это вообще возможно?
int[] ids = {R.id.radio_buttonX_axis, R.id.radio_buttonY_axis, R.id.radio_buttonZ_axis};
RadioGroup radioGroup = new RadioGroup(navigationView.getContext());
radioGroup.setOrientation(RadioGroup.VERTICAL);
for (int id : ids) {
MenuItem menuItem = navigationView.getMenu().findItem(id);
RadioButton radioButton = (RadioButton) menuItem.getActionView();
radioGroup.addView(radioButton);
}
Но выдает ошибку:
У указанного ребенка уже есть родитель. Вы должны позвонить removeView()
сначала на родителя ребенка.
Но я не смог понять, как это назвать
Метод 2: Динамическое добавление радиокнопок в навигационный ящик
navigationView.getMenu().removeGroup(R.id.radio_button_group);
RadioGroup radioGroup = new RadioGroup(navigationView.getContext());
for (int i = 0; i < 3; i++) {
RadioButton radioButton = new RadioButton(navigationView.getContext());
radioButton.setText("Show X - Axis");
radioGroup.addView(radioButton);
}
navigationView.addView(radioGroup);
Но он работает не так, как ожидалось (см. Рисунок).

Я пытался добавить radioGroup
к Menu
, но я не мог понять, как это сделать. Вот что я пытался сделать:
Menu testMenu = navigationView.getMenu();
testMenu.add(R.id.radio_button_group, testMenu.findItem(R.id.radio_buttonX_axis).getActionView().getId(), 1, "Show X - Axis");
Но он просто добавляет опцию к NavigationDrawer
, а не к радиокнопке.
Метод 3
Это просто гипотетически, я не знаю, возможно ли это или нет.
- Скопируйте экземпляры всех
radio_buttons
и сохраните в некотором массиве RadioButton[]
.
- Удалить группу (как в методе 2)
- Создайте
RadioGroup
и добавьте к нему все RadioButtons[]
.
- Добавить этот новый
RadioGroup
к navigationView
Но никто не помог. Подскажите пожалуйста что делать?