标签: android-navigation

我必须在Android Manifest中指定父活动名称吗?

我有一项活动开始另一项活动.
我是否必须在Android Manifest中指定父活动?我问这个因为可能还有其他活动会启动这个,所以我应该指定所有这些活动吗?

android:parentActivityName="com.example.myfirstapp.MainActivity" 
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-activity android-navigation

15
推荐指数
3
解决办法
3万
查看次数

没有Actionbar的导航抽屉

我搜索了很多站点(stackoverflow),但无法理解如何在没有操作栏的情况下实现导航抽屉.我知道这个问题已在这里提出,但它没有正确的解释和代码.我是Android开发的初学者,所以任何人都可以用代码我解释如何制作没有操作栏的导航抽屉

提前致谢!

android android-navigation

15
推荐指数
2
解决办法
3万
查看次数

是否可以在嵌套导航图 Android 中拥有动态目的地?

我在导航图中实现了一个嵌套图,它有 2 个图。在第一个图中,有 3 个片段,在第二个图中,有 2 个片段。图 2 包含在图 1 中。我想导航到(图 1 第 1 步)到(图 2 第 2 步)。我们不能在两个嵌套片段之间定义动作。那么有什么方法可以将动态目的地分配给导航吗?

在此处输入图片说明

图一

<?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/mobile_navigation"
    app:startDestination="@id/dashboardFragment">
    <fragment
        android:id="@+id/dashboardFragment"
        android:name="com.navigationgraphexample.fragments.DashboardFragment"
        android:label="fragment_dashboard"
        tools:layout="@layout/fragment_dashboard" >
        <action
            android:id="@+id/action_dashboardFragment_to_stepOneFragment2"
            app:destination="@id/stepOneFragment" />
        <action
            android:id="@+id/action_dashboardFragment_to_sub_nav"
            app:destination="@id/sub_nav" />

    </fragment>
    <fragment
        android:id="@+id/stepOneFragment"
        android:name="com.navigationgraphexample.fragments.StepOneFragment"
        android:label="fragment_step_one"
        tools:layout="@layout/fragment_step_one">
        <action
            android:id="@+id/action_stepOneFragment_to_stepTwoFragment"
            app:destination="@id/stepTwoFragment" />
    </fragment>
    <fragment
        android:id="@+id/stepTwoFragment"
        android:name="com.navigationgraphexample.fragments.StepTwoFragment"
        android:label="fragment_step_two"
        tools:layout="@layout/fragment_step_two" />
    <fragment
        android:id="@+id/notificationFragment"
        android:name="com.navigationgraphexample.fragments.NotificationFragment"
        android:label="fragment_notification"
        tools:layout="@layout/fragment_notification" >
        <deepLink
            android:id="@+id/deepLink"
            app:uri="myapp.com/{myargs}"
            />
        <argument android:name="myargs"
            app:argType="integer"
            android:defaultValue="1" />
    </fragment>
    <include app:graph="@navigation/sub_nav" />
</navigation> …
Run Code Online (Sandbox Code Playgroud)

android android-navigation android-jetpack

15
推荐指数
1
解决办法
2887
查看次数

使用导航组件时,片段savedInstanceState 始终为空

目前,我正在玩带有底部导航栏的 Android 导航组件。在玩的过程中,我意识到两个事实:

  • 片段总是被重新创建(onCreate, onViewCreated,onViewDestroyed一旦用户导航到另一个片段就会被调用)
  • savedInstanceState始终为空(在onCreateonViewCreated等等)

第一个问题可以通过使用 custom 修复,FragmentNavigator如果片段已经存在,它将重用

package am.chamich.apps.advancedbottomnavigation.navigator

import android.content.Context
import android.os.Bundle
import androidx.navigation.NavDestination
import androidx.navigation.NavOptions
import androidx.navigation.Navigator
import androidx.navigation.fragment.FragmentNavigator


@Navigator.Name("retain_state_fragment")
class RetainStateFragmentNavigator(
    private val context: Context,
    private val manager: androidx.fragment.app.FragmentManager,
    private val containerId: Int
) : FragmentNavigator(context, manager, containerId) {

    override fun navigate(
        destination: Destination,
        args: Bundle?,
        navOptions: NavOptions?,
        navigatorExtras: Navigator.Extras?
    ): NavDestination? {
        val tag = destination.id.toString()
        val transaction = manager.beginTransaction()

        val currentFragment …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-navigation android-bottomnav android-architecture-components

15
推荐指数
1
解决办法
2922
查看次数

Android导航组件+登录流程+嵌套BottomNavigationView

我正在努力使用 Android 导航组件构建导航,如下图所示。

我需要一个“登录流程”,检查用户是否登录,然后导航到应用程序的主要部分(也清除后台堆栈)。主要部分包含一个带有三个选项卡的 BottomNavigationView。但是如果我点击工具栏上的设置图标,我也想显示一个全屏的 SettingsFragment。

我是否需要两个带有单独导航图的 NavHostFragment?如果是,我怎样才能将它们结合起来并有一个适当的反向导航?

任何想法如何使用android导航组件实现这样的导航?

在此处输入图片说明

android android-navigation android-bottom-nav-view android-jetpack-navigation

14
推荐指数
1
解决办法
2109
查看次数

Jetpack 使用多个可选参数组合导航

https://developer.android.com/jetpack/compose/navigation#optional-args

一直在查看文档以了解如何使用多个可选参数以及如何传递它们

但在文档中只提到了一个参数。

composable(
    "profile?userId={userId}",
    arguments = listOf(navArgument("userId") { defaultValue = "me" })
) 
Run Code Online (Sandbox Code Playgroud)

并调用它

composable("profile")
composable("profile/user123") // if you want to pass param
Run Code Online (Sandbox Code Playgroud)

如何声明和调用两个参数?

android android-navigation android-jetpack-compose

14
推荐指数
2
解决办法
1万
查看次数

阻止/禁用最近的应用按钮

我知道这个问题在此之前被问过Android禁用最近的任务按钮,就像在SureLock中一样,但由于答案没有用,所以也许有些人可以分享这个被遗忘的事情.

我也尝试过:

private void closeRecents() {
     activ.sendBroadcast(new Intent("com.android.systemui.recent.action.CLOSE"));
     Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
     closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
     ComponentName recents = new ComponentName(SYSTEM_UI_PACKAGE_NAME, RECENTS_ACTIVITY);
     closeRecents.setComponent(recents);
     activ.startActivity(closeRecents);
}
Run Code Online (Sandbox Code Playgroud)

但没有运气

android android-navigation

13
推荐指数
2
解决办法
4万
查看次数

如何从 SafeArgs 中的资源获取默认字符串值?

我只是在学习 Android NavigationUI,并尝试使用 Safe Args 中的字符串默认值设置工具栏标题。但是有一些问题。

“字符串资源”文件:

    <string name="title_add_item">Add new items</string>
Run Code Online (Sandbox Code Playgroud)

导航图文件。将标签设置为Title: {title}参数。

<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/nav_graph"
app:startDestination="@id/mainFragment">

<fragment
    android:id="@+id/addNewItemFragment"
    android:name="com.myapplication.AddNewItemFragment"
    android:label="Title: {title}"
    tools:layout="@layout/fragment_add_new_item" >
    <argument
        android:name="title"
        app:argType="string"
        android:defaultValue="@string/title_add_item" />
</fragment>
<fragment
    android:id="@+id/mainFragment"
    android:name="com.myapplication.MainFragment"
    android:label="fragment_main"
    tools:layout="@layout/fragment_main" >
    <action
        android:id="@+id/action_to_add_items_fragment"
        app:destination="@id/addNewItemFragment" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

如果{app:argType="string"}我遇到错误:

 Caused by: org.xmlpull.v1.XmlPullParserException: unsupported value 'Add new items' for string. You must use a "reference" type to reference other resources.
Run Code Online (Sandbox Code Playgroud)

如果 {app:argType="reference"}应用程序有效,但我在标题中有一个数字(我认为这是一个资源 ID):

在此处输入图片说明

当然,我可以通过从参数中获取它来分配代码中工具栏标题的值。但是是否可以更改此代码以便正确填写标题?

string android android-navigation androidx android-safe-args

13
推荐指数
1
解决办法
1441
查看次数

viewModelScope.launch 第二次不起作用

我有 2 个片段,FragmentA 包含星球大战角色列表,而 FragmentB 包含该角色的详细信息。我在片段中使用 viewModelScope.launch 来获取角色的详细信息。下面是我的视图模型

@HiltViewModel
class DetailsViewModel @Inject constructor(
    private val getSpecieDetailsUseCase: GetSpecieDetailsUseCase,
    private val getFilmDetailsUseCase: GetFilmDetailsUseCase,
    private val getPlanetDetailsUseCase: GetPlanetDetailsUseCase,
    private val mapper: CharacterDetailMapper
) : ViewModel() {

    var characterDetailsModel = MutableLiveData<CharacterDetailsModel?>()

    fun init(infoModel: CharacterInfoModel?) {
        characterDetailsModel.postValue(null)
        try {
            viewModelScope.launch {
                infoModel?.let {
                    val specieResponse = async(context = Dispatchers.IO) {
                        it.specieIdList?.map {
                            getSpecieDetailsUseCase.executeUseCase(
                                GetSpecieDetailsUseCase.GetSpecieDetailsRequest(
                                    it
                                )
                            )
                        }
                    }
                    val filmResponse = async(context = Dispatchers.IO) {
                        it.filmsIdList?.map {
                            getFilmDetailsUseCase.executeUseCase(
                                GetFilmDetailsUseCase.GetFilmDetailsRequest(
                                    it
                                )
                            )
                        }
                    } …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-navigation android-viewmodel kotlin-coroutines

13
推荐指数
1
解决办法
2716
查看次数

使用带有Android导航UI库的BottomNavigationView导航时,从操作栏中删除按钮

我创建了一个小应用程序,它有三个片段,可以通过BottomNavigationView进行顶级导航.如果您启动应用程序并单击底部导航栏上的导航按钮,则会在操作栏中显示一个向上按钮.以下是活动的代码:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)

        setSupportActionBar(toolbar)

        val navController = navHostFragment.findNavController()
        setupActionBarWithNavController(this, navController)
        setupWithNavController(bottomNav, navController)
    }

    override fun onSupportNavigateUp(): Boolean
            = findNavController(navHostFragment).navigateUp()

}
Run Code Online (Sandbox Code Playgroud)

这是结果的屏幕截图.该应用程序在主屏幕上启动,我所做的只是单击BottomNavigationView中的配置文件按钮.

在此输入图像描述

我试过听BottomNavigationView的项目选择并使用不同的NavOptions手动导航无济于事.当用户使用BottomNavigationView导航时,我们可以做些什么来避免在操作栏中显示向上按钮?

android-support-library android-navigation android-jetpack

12
推荐指数
3
解决办法
3182
查看次数