Неправильная анимация при использовании компонента архитектуры навигации - PullRequest
0 голосов
/ 02 февраля 2019

Я создаю приложение, которое использует BottomNavigationView и компонент архитектуры навигации (https://github.com/fkshiba/POCNavigation). У меня есть один файл graph.xml для каждой вкладки, и переход между вкладками выполняется с помощью Activity без AC Navigationиз-за множественного обратного стека проблема . У меня есть действие с анимацией перехода на home_graph.xml из Home2 в Home 3. Проблема заключается в том, что после запуска этого перехода и возврата в Home2затем перейдите на другую вкладку. Он снова запускает всплывающую анимацию для фрагмента Home2, когда я перехожу с другой вкладки, даже если для нее не было указано никакой анимации.

Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

NavigationUI всегда будет всплывать к месту назначения перед переходом на другую вкладку в BottomNavigationView, это просто, как работает библиотека lib.Установите пользовательский OnNavigationItemSelectedListener и выполните навигацию самостоятельно и передавайте анимацию через NavOptions.

0 голосов
/ 03 февраля 2019

Я вижу ваш код на GitHub и предполагаю, что вы используете навигацию Android неправильно.Во-первых, вам не нужно создавать разные графики (в вашем случае четыре) для разных фрагментов.Просто создайте один график и добавьте в него все фрагменты, которые вы должны использовать в нижней панели навигации и для других транзакций.И, во-вторых, вам не нужно выполнять транзакции фрагментов вручную (в коде активности), но это не обязательно.Ваш обновленный код: только один график:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/home_graph"
app:startDestination="@id/home2Fragment">
<fragment
    android:id="@+id/home2Fragment"
    android:name="com.felipeshiba.pocnavigation.Home2Fragment"
    android:label="fragment_home2"
    tools:layout="@layout/fragment_home2" >
    <action
            android:id="@+id/action_home2Fragment_to_home3Fragment"
            app:destination="@id/home3Fragment"
            app:enterAnim="@anim/nav_default_enter_anim"
            app:exitAnim="@anim/nav_default_exit_anim"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment
    android:id="@+id/home3Fragment"
    android:name="com.felipeshiba.pocnavigation.Home3Fragment"
    android:label="fragment_home3"
    tools:layout="@layout/fragment_home3" >
    <deepLink
        android:id="@+id/deepLink"
        app:uri="ifood://home/" />
</fragment>
<fragment
    android:id="@+id/orders2Fragment"
    android:name="com.felipeshiba.pocnavigation.Orders2Fragment"
    android:label="fragment_orders2"
    tools:layout="@layout/fragment_orders2" />
<fragment
    android:id="@+id/profile2Fragment"
    android:name="com.felipeshiba.pocnavigation.Profile2Fragment"
    android:label="fragment_profile2"
    tools:layout="@layout/fragment_profile2" />
<fragment
    android:id="@+id/search2Fragment"
    android:name="com.felipeshiba.pocnavigation.Search2Fragment"
    android:label="fragment_search2"
    tools:layout="@layout/fragment_search2" /></navigation>

Ваш обновленный код активности:

class NavigationActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_navigation)
    val host: NavHostFragment = supportFragmentManager
            .findFragmentById(R.id.navigation_container) as NavHostFragment? ?: return

    val navController = host.navController
    bottom_navigation.setupWithNavController(navController)

}}

Теперь вы можете просто вызывать элементы навигации (фрагменты) в своем меню, заменяя пункт меню.id с фрагментами id как показано ниже: обновленное menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/home2Fragment"
    android:icon="?android:attr/actionModeCopyDrawable"
    android:title="Home" />

<item
    android:id="@+id/search2Fragment"
    android:icon="@android:drawable/ic_menu_search"
    android:title="Search" />

<item
    android:id="@+id/orders2Fragment"
    android:icon="?android:attr/actionModePasteDrawable"
    android:title="Orders" />

<item
    android:id="@+id/profile2Fragment"
    android:icon="?android:attr/actionModeCutDrawable"
    android:title="Profile" /></menu>

Ваша активность.xml:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NavigationActivity">

<fragment
    android:id="@+id/navigation_container"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:visibility="gone"
    app:defaultNavHost="true"
    app:navGraph="@navigation/home_graph"
    app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
    app:layout_constraintTop_toTopOf="parent" />

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"
    app:menu="@menu/bottom_navigation"></android.support.constraint.ConstraintLayout>

Для другого обновленного (рабочего) кода, например, проверка манифеста здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...