アンドロイドJetpackの-ナビゲーション

アンドロイドJetpackの-ナビゲーション(一)

1.はじめに

ナビゲーションは、ライブラリとAndroidの簡素化プラグインのナビゲーションです。

ナビゲーションフラグメントがハンドオーバを管理するために使用され、及び方法により可視化することができ、我々は対話プロセスアプリケーションを参照してください。

2.利点

  • プロセススイッチングフラグメント
  • デフォルトでは、フラグメントの正しい取り扱いが前後に
  • 標準化されたトランジションとアニメーションのリソースを提供します
  • 実装と深いつながりを扱います
  • あなたは、ツールバー、BottomNavigationViewとアクションバーをバインドすることができます
  • ViewModelにサポート

3.準備

AndroidStudio 3.2以上

4.ナビゲーション三つの要素

名詞 説明
Nvigtiodargrf これは、新しいリソースファイル、ユーザーはそれを達することができる先を見ることができます(ユーザが画面のインターフェイスに達することができる)だけでなく、プロセスのビジュアルインターフェイスとの間の関係であります
NavHostFragment コンテナの現在の断片
NavController ナビゲーションコントローラ

5.

1. [追加の依存

implementation group: 'androidx.navigation', name: 'navigation-fragment', version: '2.2.0'
implementation group: 'androidx.navigation', name: 'navigation-ui', version: '2.2.0'

NavigationGraphを作成します。2.

ナビゲーションフォルダディレクトリの解像度に新しいファイルを作成し、新しいナビゲーションリソースファイルを作成して右クリックします。

ここに画像を挿入説明
ここに画像を挿入説明

先:

HOST:すなわちテーブルNavHostFragment、即ち容器に断片

GRAPH:fは現在の容器フラグメントであります

app:startDestinationデフォルトの開始位置

android:name:完全なパッケージ名の断片

tools:layout:フラグメントレイアウトファイル

アクション

android:id:のジャンプフラグメント内の参照このIDを

android:destination:このアクションの代わりに送信先は、フラグメントによって表されるこのフラグメントから先にジャンプすることです

android:popUpToこれは、指定された断片popUpToまでスタックを表します

NavHostFragmentの確立3。

すなわち、コンテナの現在の断片であるHOST第2のステップと、です

<androidx.constraintlayout.widget.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=".LoginActivity">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/nav_activity"
        app:navGraph = "@navigation/welcome_navigation"
        app:defaultNavHost = "true"
        android:name="androidx.navigation.fragment.NavHostFragment"
        />


</androidx.constraintlayout.widget.ConstraintLayout>
プロパティ 説明
アンドロイド:名 値はandroidx.navigation.fragment.NavHostFragmentでなければなりません
android:navGraph 存放的是第二步建好的导航资源文件,也就是确定了NavigationGraph
app:defaultNavHost=“true” 与系统的返回按钮相关联

6. 处理跳转

跳转通过NavController对象,它有三种获取方法:

  • NavHostFragment.findNavController(Fragment);
  • Navigation.findController(Activity,@IdRes int viewId);
  • Navigation.findController(View);

调用NavController的navigate方法执行跳转,navigate的参数可以是一个destination(这里就是fragment在导航图nav_graph中的id),也可以是action的id

7. 演示

welcome_navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<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/welcome_navigation"
    app:startDestination="@id/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.example.navigationproject.FirstFragment"
        android:label="fragment_first"
        tools:layout="@layout/fragment_first"
        >
        <action
            android:id="@+id/action_firstFragment_to_secondFragment"
            app:destination="@id/secondFragment"
            app:enterAnim="@anim/fragment_close_enter"
            app:exitAnim="@anim/fragment_close_exit"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim" />
        <action
            android:id="@+id/action_firstFragment_to_thirdFragment"
            app:destination="@id/thirdFragment"
            />
    </fragment>
    <fragment
        android:id="@+id/secondFragment"
        android:name="com.example.navigationproject.SecondFragment"
        android:label="fragment_second"
        tools:layout="@layout/fragment_second" >
        <action
            android:id="@+id/action_secondFragment_to_blankFragment2"
            app:destination="@id/blankFragment2"
            app:enterAnim="@anim/fragment_close_enter"
            app:exitAnim="@anim/fragment_close_exit"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim" />
    </fragment>
    <fragment
        android:id="@+id/thirdFragment"
        android:name="com.example.navigationproject.ThirdFragment"
        android:label="fragment_third"
        tools:layout="@layout/fragment_third" />
    <fragment
        android:id="@+id/blankFragment2"
        android:name="com.example.navigationproject.BlankFragment"
        android:label="fragment_blank"
        tools:layout="@layout/fragment_blank" >
        <action
            android:id="@+id/backToFirst"
            app:popUpTo="@id/firstFragment"/>
        <action
            android:id="@+id/aBackToFirst"
            app:destination="@id/firstFragment"
            app:enterAnim="@anim/fragment_close_enter"
            app:exitAnim="@anim/fragment_close_exit"
            app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim" />
    </fragment>
</navigation>

ここに画像を挿入説明

主要通过上面的一条线来演示fragment的切换

firstfragment:点击第一个button进入到secondfragment

secondfragment:点击textview进入到blankfragment2

blankfragment2:点击第一个textview通过android:popupto的方式跳转到firstfragment

​ 点击第二个text view通过android:destination的方式跳转到firstfragment

在每个fragment中我们都重写了onDestroy方法,并在控制台打印log

ここに画像を挿入説明

当我们点击了blankfragment2的第一个textview的时候,可以看到blankfragment2和secondfragment都执行了onDestroy方法并且看界面回到了firstfragment

ここに画像を挿入説明

当我们点击blankfragment2的第二个textview的时候,可以看到控制台并没有打印什么,也就是说此时fragment容器中共有四个fragment:firstfragment-secondfragment-blankfragment2-firstfragment

app:defaultNavHost="true"的作用

表示 NavHostFragment 可以拦截处理返回键。

あなたが戻ってキーをクリックしたときにfalseに設定し、次に、その効果はフラグメントではなく、活動を切り替えることであれば

公開された31元の記事 ウォンの賞賛9 ビュー1391

おすすめ

転載: blog.csdn.net/qq_43621019/article/details/104233286