我希望你做得很好。拜托,我需要一个问题的帮助。我正在开发一个有三个活动的应用程序:StartActivity、MainActivity和SettingActivity。StartActivity是启动程序Activity,MainActivity有NavHostFragment,其中有四个片段。当我第一次启动应用程序时,它会在一段延迟后导航到MainActivity;这是预期行为之一。现在,当应用导航到MainActivity时,当它被置于background时,它不会从MainActivity中的当前状态恢复。每次我在与fragments交互后将它置于Background时,它都会从StartActivity重新启动,并且所有操作都会丢失。例如,如果我开始使用SearchView在片段中搜索某个内容,并将应用置于后台,它会丢失我正在执行的操作,并从StartActivity重新启动,而不是从MainActivity恢复。我尝试了一些解决方案,但都不起作用。
以下是我的活动代码:
开始活动
@Suppress("DEPRECATION")
class StartActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_start)
if (!isTaskRoot){
finish()
return
}
Handler().postDelayed({
startActivity(Intent(this, MainActivity::class.java))
finish()
}, 1800)
}
}
在这里,我首先在intent中使用了finish(),由于它不起作用,我添加了if语句中的代码
主要活动
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
appBarConfiguration = AppBarConfiguration(navController.graph, binding.drawerLayout)
NavigationUI.setupActionBarWithNavController(this, navController, binding.drawerLayout)
NavigationUI.setupWithNavController(binding.navView, navController)
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController, appBarConfiguration)
}
}
我的清单内容
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="eg.esperantgada.dailytodo">
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<application
android:name=".application.TodoApplication"
android:allowBackup="true"
android:fullBackupContent="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DailyToDo"
tools:ignore="DataExtractionRules">
<activity
android:name=".StartActivity"
android:configChanges="orientation|screenSize"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:noHistory="true"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|screenSize"/>
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings" />
<receiver android:name=".broadcastreceiver.TodoAlarmReceiver" />
</application>
</manifest>
如果有谁能帮我修一下,我会很高兴的。先谢谢了。
2条答案
按热度按时间hgqdbh6s1#
如果您从清单文件中的StartActivity标记中删除
android:launchMode="singleTop"
,则应该完成所有操作。您可以在此stackOverFlow解决方案https://stackoverflow.com/a/3283118/6565331中了解有关singletop的更多信息
jm81lzqq2#
我觉得是
android:noHistory="true"
的问题,之前修的时候加上去的,忘记去掉了,现在去掉就好了。