Как создать фрагменты с помощью newInstance () при использовании NavController? - PullRequest
1 голос
/ 28 апреля 2020

Я создаю одноактное приложение, которое использует NavController и фрагменты для отображения каждого экрана.

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

В методе onCreate() моего MainActivity у меня есть:

mDrawerLayout = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
        R.id.nav_home,
        R.id.nav_visit_website_1,
        R.id.nav_visit_website_2,
        R.id.nav_visit_website_3)
        .setDrawerLayout(mDrawerLayout)
        .build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);

Я создал класс VisitWebsiteFragment, который имеет stati c newInstance(String websiteUrl) метод - с намерением использовать его для трех пунктов меню веб-сайта.

Я прочитал навигационную документацию , но я не уверен, как перехватить / контролировать NavController, чтобы создать три экземпляра фрагмента с помощью VisitWebsiteFragment.newInstance(...).

. Может быть, некоторые аспекты навигации, которые я полностью пропускаю. Может ли кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 28 апреля 2020

Идентификаторы пунктов меню: nav_visit_website_1, nav_visit_website_2 и nav_visit_website_3.

Добавление этого кода в мой nav_graph. xml дает мне то, что мне нужно:

<fragment
    android:id="@+id/visit_website"
    android:name="org.example.VisitWebsiteFragment"
    android:label="@string/visit_website" />

<action
    android:id="@+id/nav_visit_website_1"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website1" />
</action>

<action
    android:id="@+id/nav_visit_website_2"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website2" />
</action>

<action
    android:id="@+id/nav_visit_website_3"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website3" />
</action>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...