Различные панели навигации в зависимости от ролиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Различные панели навигации в зависимости от роли

Сообщение Anonymous »

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

(Извините, изображение огромное, я новичок в вопросах Android Studio и StackOverflow).Изображение представляет собой пример роли под названием player, которая у меня уже есть и работает, но мне нужны другие элементы или другое меню для другого мастера роли. Изображение сложно показать основным, потому что то, что я показываю, уже является одним из двух результатов того, что я хочу. Другой вариант будет точно таким же, но с другими элементами (вместо карты и фичи будет, например, список игроков, а также карта и т. д.).
Мне удалось сказать роли, я взял эту часть под контроль, но все, что я пробовал для навигации, приводило к сбою приложения.
Среди вещей, которые я пробовал, самая очевидная - это if elses (делает, как сказано в этом сообщении), но это приводит к сбою приложения (говорит, что вторая навигация не существует, а в некоторых других элементах установлены нулевые элементы).
Оставив здесь код навигации, которую я пробовал с помощью if else:

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


if (rol.equalsIgnoreCase("player")) {
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.appBarMain.toolbar);
DrawerLayout drawer = binding.drawerLayout;
NavigationView navigationView = binding.navView;
View hView = navigationView.getHeaderView(0);

mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_map,
R.id.nav_charsheet)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}

if (rol.equalsIgnoreCase("master")) {
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(R.layout.activity_ma_main);
setSupportActionBar(binding.appBarMain.toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_ma_layout);
NavigationView navigationView = findViewById(R.id.nav_ma_view);
View hView = navigationView.getHeaderView(0);

mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_map)
.setOpenableLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_ma_host_fragment_content_main);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}

Выдается следующее сообщение:

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

E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.apptest.androidapptest, PID: 5776
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.apptest.androidapptest/org.apptest.androidapptest.MainActivity}: android.view.InflateException: Binary XML file line #11 in org.apptest.androidapptest:layout/activity_ma_main: Binary XML file line #10 in org.apptest.androidapptest:layout/content_main: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.view.InflateException: Binary XML file line #11 in org.apptest.androidapptest:layout/activity_ma_main: Binary XML file line #10 in org.apptest.androidapptest:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #10 in org.apptest.androidapptest:layout/content_main: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #10:  Duplicate id 0x7f0a01b1, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:116)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1067)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1261)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1117)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1261)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1117)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:699)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195)
at org.apptest.androidapptest.MainActivity.onCreate(MainActivity.java:135)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Я подозреваю, что это может быть нагнетатель, но я не знаю, как это решить, и даже не в этом ли проблема.
Извините Я не знаю, что еще добавить, и весь вопрос такой бардак. Несколько дней я пробовал несколько вещей и в итоге запутался, но если вы думаете, что я могу что-то добавить или попробовать, я это сделаю.
Спасибо всем, признателен за любые отзывы. !!

Подробнее здесь: https://stackoverflow.com/questions/787 ... ng-on-role
Ответить

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

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

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

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

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