我有一项活动开始另一项活动.
我是否必须在Android Manifest中指定父活动?我问这个因为可能还有其他活动会启动这个,所以我应该指定所有这些活动吗?
android:parentActivityName="com.example.myfirstapp.MainActivity"
Run Code Online (Sandbox Code Playgroud) android android-manifest android-activity android-navigation
我搜索了很多站点(stackoverflow),但无法理解如何在没有操作栏的情况下实现导航抽屉.我知道这个问题已在这里提出,但它没有正确的解释和代码.我是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 导航组件。在玩的过程中,我意识到两个事实:
onCreate, onViewCreated,onViewDestroyed一旦用户导航到另一个片段就会被调用)savedInstanceState始终为空(在onCreate,onViewCreated等等)第一个问题可以通过使用 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
我正在努力使用 Android 导航组件构建导航,如下图所示。
我需要一个“登录流程”,检查用户是否登录,然后导航到应用程序的主要部分(也清除后台堆栈)。主要部分包含一个带有三个选项卡的 BottomNavigationView。但是如果我点击工具栏上的设置图标,我也想显示一个全屏的 SettingsFragment。
我是否需要两个带有单独导航图的 NavHostFragment?如果是,我怎样才能将它们结合起来并有一个适当的反向导航?
任何想法如何使用android导航组件实现这样的导航?
android android-navigation android-bottom-nav-view android-jetpack-navigation
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禁用最近的任务按钮,就像在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 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
我有 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
我创建了一个小应用程序,它有三个片段,可以通过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导航时,我们可以做些什么来避免在操作栏中显示向上按钮?