如何不在onBackPressed中破坏活动?

0 人关注

我需要在调用 onBackPressed 方法时,活动不会被销毁,而是暂停和停止。

我的想法是,它的工作方式就像手机的Home键被按下时,调用 onPause onStop ,因为这样,活动就不会被破坏,当活动被重新打开时, onResume 被调用,这样变量就会保持活动被关闭时的值。

有什么方法可以做到这一点吗?如果没有,是否有办法在活动关闭后保持变量的状态?我曾试图使用SharedPreference,但我不能使用它们,因为我的变量的类型与所提供的变量不同。

android
kotlin
android-activity
onbackpressed
UyerBit
UyerBit
发布于 2021-04-26
1 个回答
Zekovski
Zekovski
发布于 2021-04-26
已采纳
0 人赞同

如果你想定制你的按钮的行为,你必须在你的活动中使用...

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK){
        return true;    //To assess you have handled the event.
    //If you want the normal behaviour to go on after your code.
    return super.onKeyDown(keyCode, event);

Here is 一些更多的信息关于处理关键事件。

尽管看起来你想做的只是保留你的活动的状态。最好的方法是在退出前存储你的数据,并在你重新创建你的活动时将其调回来。

如果你想存储临时数据(我的意思是在两次启动之间不保存它),一种方法是使用共享偏好.

//Before your activity closes
private val PREFS_NAME = "kotlincodes"
private val SAVE_VALUE = "valueToSave"
val sharedPref: SharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedPref.edit()
editor.putInt(SAVE_VALUE, value)
editor.commit()
//When you reopen your activity
private val PREFS_NAME = "kotlincodes"
val sharedPref: SharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
sharedPref.getString(SAVE_VALUE, null)

Another way to do it since you cannot use 共享偏好 (because you don't use primitive types), is to use a global singleton.

这里有一个Java实现...

public class StorageClass{
    private Object data1 = null;
    private StorageClass instance;
    private StorageClass(){};
    public static final StorageClass getInstance(){
        if(instance == null){
            synchronized(StorageClass.class){
                if(instance==null)    instance = new StorageClass();
        return instance;
    public void setData1(Object newData) { data1 = newData; }
    public Object getData1() { return data1; }

Then just use ...

StorageClass.getInstance().setData1(someValue);

...和...

StorageClass.getInstance().getData1(someValue);

In Kotlin ...

object Singleton{
    var data1