91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JetPack怎么使用Activity中的導航菜單

發布時間:2022-04-16 15:42:35 來源:億速云 閱讀:194 作者:iii 欄目:開發技術

這篇文章主要介紹了JetPack怎么使用Activity中的導航菜單的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇JetPack怎么使用Activity中的導航菜單文章都會有所收獲,下面我們一起來看看吧。

提前做好準備,打開文件 res/navigation/ 下你的 xml 文件,點擊每一個 Fragment 頁面,給它們設置對應的標題,在 Design 下的右邊的 id 下,有一個屬性是 label ,填寫上對應的名稱就可。

1. 使用 Activity 中的導航菜單

默認 Activity 的導航菜單顯示的是標題和返回按鈕,而返回按鈕是返回到上一個 Activity ,而我們的 Navigation 是在一個 Activity 中的,假如當前 Activity 位于棧的最上層,我學習的代碼就是讓所有的 Fragment 都在 MainActivity 中,由于無論我怎樣跳轉都在 MainActivity 中。所以現在有兩個兩個任務:

  1. 首先跳轉到下一頁以后會出現返回按鈕;

  2. 點擊返回按鈕能夠正常返回上一個 Navigation 頁面。

因為第二個需要在第一個完成的基礎上才能看得出效果,所以我們按上面的步驟進行。

本來的效果:

JetPack怎么使用Activity中的導航菜單

默認效果
打開承載了 Fragment 的 Activity 的 java 文件,我這里是 MainActivity.java,在 onCreate 方法下增加如下代碼:

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();  NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);}

android 官方獲取 navController 是直接獲取的 Navigation.findNavController(this, R.id.nav_host_fragment); ,假如很不幸你也這樣寫了,那么就會出現的錯誤:

Caused by: java.lang.IllegalStateException: Activity com.example.learnjetpack.MainActivity@b516fb8 does not have a NavController set on 2131230962

只需修改成我上面那樣即可以處理這個問題,至于起因我現在解釋不了,以后會補全。上面的代碼就是托管本來 Activity 的 Bar 。

JetPack怎么使用Activity中的導航菜單

Navigation托管Activity后的效果
這樣第一個完成了,至于第二個,只要要重寫本來 Activity 的返回的邏輯:

@Overridepublic boolean onSupportNavigateUp() {  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  return NavigationUI.navigateUp(navController, appBarConfiguration)            || super.onSupportNavigateUp();}

接下來看看最終的效果。

JetPack怎么使用Activity中的導航菜單

最終的效果
我還遇到了一個問題,之前我的 MainActivity 的 theme 設置 android:theme="@style/Theme.AppCompat.Light.NoActionBar" ,結果出現了下面的錯誤:

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference

把這個改掉就可,由于設置 NoActionBar 了,結果又讓顯示,誠然手機就會耍小脾氣。這個是在 AndroidManifest.xml 中設置的。

2. 使用 Toolbar

這種方式就是不用默認的,而是自己設置;所以這個很容易想到需要將 MainActivity 的 theme 改為上面會出現錯誤的情況。打開 AndroidManifest.xml 文件,修改對應的 Activity 的 theme,修改成 @style/Theme.AppCompat.Light.NoActionBar 。

JetPack怎么使用Activity中的導航菜單

沒有bar的效果
打開對應的 Activity 下的布局文件,我這里是 MainActivity ,布局文件為 activity_layout.xml ,在 androidx.fragment.app.FragmentContainerView 上增加:

<androidx.appcompat.widget.Toolbar      android:id="@+id/toolbar"      android:layout_width="0dp"      android:layout_height="?attr/actionBarSize"      app:layout_collapseMode="pin"      app:layout_constraintBottom_toTopOf="@+id/nav_host_fragment"      app:layout_constraintEnd_toEndOf="parent"      app:layout_constraintStart_toStartOf="parent"      app:layout_constraintTop_toTopOf="parent" />

先看看效果:


JetPack怎么使用Activity中的導航菜單

自己設置頭部的效果

接下來讓其顯示內容。

同樣在 Activity 中的增加:

@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);  NavController navController = navHostFragment.getNavController();  AppBarConfiguration appBarConfiguration =            new AppBarConfiguration.Builder(navController.getGraph()).build();  Toolbar toolbar = findViewById(R.id.toolbar);  NavigationUI.setupWithNavController(            toolbar, navController, appBarConfiguration);}

這種方式 Navigation 會自動托管 Toolbar ,這樣即可以輕松實現上面的效果,其余的代碼就不需要,看效果:

JetPack怎么使用Activity中的導航菜單

使用 Toolbar 最終的效果

關于“JetPack怎么使用Activity中的導航菜單”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“JetPack怎么使用Activity中的導航菜單”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邯郸市| 息烽县| 垦利县| 阳原县| 安丘市| 韶山市| 泗水县| 英吉沙县| 阿瓦提县| 德令哈市| 元江| 平江县| 白城市| 客服| 沂水县| 临潭县| 衡南县| 临夏市| 顺平县| 许昌市| 嘉义县| 宁安市| 洪雅县| 奇台县| 昌吉市| 岫岩| 文安县| 太原市| 霸州市| 肃宁县| 柯坪县| 永年县| 玛多县| 连州市| 惠东县| 肇东市| 盐山县| 富宁县| 茂名市| 泰兴市| 峨边|