android-fragments 我的应用每次置于后台时都无法从当前Activity恢复,而是从启动器Activity重新启动,如何解决此问题?

deikduxw  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(176)

我希望你做得很好。拜托,我需要一个问题的帮助。我正在开发一个有三个活动的应用程序:StartActivityMainActivitySettingActivityStartActivity是启动程序Activity,MainActivityNavHostFragment,其中有四个片段。当我第一次启动应用程序时,它会在一段延迟后导航到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>

如果有谁能帮我修一下,我会很高兴的。先谢谢了。

hgqdbh6s

hgqdbh6s1#

如果您从清单文件中的StartActivity标记中删除android:launchMode="singleTop",则应该完成所有操作。
您可以在此stackOverFlow解决方案https://stackoverflow.com/a/3283118/6565331中了解有关singletop的更多信息

jm81lzqq

jm81lzqq2#

我觉得是android:noHistory="true"的问题,之前修的时候加上去的,忘记去掉了,现在去掉就好了。

相关问题