Kotlin - Как мне установить код sharedpreference, чтобы я открывал закрытое приложение, оно открывает последнюю активность, где я ее оставил - PullRequest
0 голосов
/ 08 января 2019

Я сделал два действия в своем приложении, я хочу, чтобы приложение открывалось там, где я остановился. Другими словами, не действие по умолчанию, а действие, в котором я находился, когда последний раз выходил из приложения.

1 Ответ

0 голосов
/ 08 января 2019

Вы можете установить SplashActivity, где запускается ваше приложение, которое будет запускать другие действия.

В этой SplashActivity вы можете установить переменную lastActivity, которая будет кодом для сохранения того, каким действием вы были в последний раз. Вы получаете это с SharedPreference, а затем переходите к действию.

т.е.:

String lastActivity = SharedPreference.getString(...) // I don't really remember the syntax
if (lastActivity == "HelloWorldActivity")
    startActivity(HelloWorldActivity.getStartIntent(context))
else if (lastActivity == "GoodByeActivity")
    startActivity(GoodByeActivity.getStartIntent(context))

Тогда НЕ забывайте редактировать значение SharedPreference КАЖДЫЙ РАЗ, когда вы меняете активность.

Я не знаю, хорошая ли это практика, но не стесняйтесь проверить это и подумать.

EDIT

Во-первых, вам нужно понять, как работает Общий файл настроек. Я думаю, это выглядит так:

"app_name"="Your app name"
"last_activity"="Your last activity"
"user_age"="23"

Это может быть первое запущенное вами действие:

class SplashActivity : AppCompatActivity() {

    var lastActivity = ""

    override fun onCreate(savedInstanceState : Bundle?) {
        super.onCreate()

        /*
            Here, we will get the SharedPreferencesFile.
            Then, we get the value linked to the key TAG_LAST_ACTIVITY (set in companion object)
        */
        val sharedPref = this.getSharedPreferences(getString(R.string.shared_preference_file_name), 0)
        lastActivity = sharedPref.getString(TAG_LAST_ACTIVITY, "")

        var activityToStart : AppCompatActivity? = null
        if (lastActivity.isBlank())
             activityToStart = YourActivityToStartAtFirstLaunch.getStartIntent(this)
        else if (lastActivity.equals(TAG_ACTIVITY_ONE))
             activityToStart = ActivityOne.getStartIntent(this)
        else if (lastActivity.equals(TAG_ACTIVITY_TWO))
             activityToStart = ActivityTwo.getStartIntent(this)
        else if
             ... // Use as many as else if you need, but think about the "when" condition, it is better !

        startActivity(activityToStart)
    }

    companion object {
        private const val TAG_LAST_ACTIVITY = "last_activity"
        private const val TAG_ACTIVITY_ONE = "activity_one"
        private const val TAG_ACTIVITY_TWO = "activity_two"
    }
}

А это может быть ваш ActivityOne, например:

class ActivityOne : AppCompatActivity() {

    override fun onCreate(savedInstanceState : Bundle?) {
        super.onCreate()

        /*
            Here, we will modify the variable LAST_ACTIVITY in the shared preferences file by setting it to "activity_one".
            So, if the user quit this app now, you will know at next launch in which activity he stopped.
            I think it is a better practice to set this in the onPause() or onStopped() method. Think about it ! ;)
        */
        val sharedPrefEditor = this.getSharedPreferences(getString(R.string.shared_preference_file_name, 0)).edit()
        sharedPrefEditor.putString(TAG_LAST_ACTIVITY, TAG_ACTIVITY_ONE)
        sharedPrefEditor.apply()
    }

    companion object {
        fun getStartIntent(context : Context) : Intent = Intent(context, ActivityOne()::class.java)

        private const val TAG_ACTIVITY_ONE = "activity_one"
        private const val TAG_LAST_ACTIVITY = "last_activity"
    }    
}

Не забудьте указать имя файла общих настроек в файле values ​​/ strings.xml:

<string name="shared_preference_file_name">com.example.yourappname.sharedpref"</string>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...