繁体   English   中英

如何不破坏 onBackPressed 中的活动?

[英]How not to destroy activity in onBackPressed?

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

我的想法是,它就像按下移动设备的 Home 按钮时一样工作,它调用onPauseonStop因为这样,活动不会被破坏,当活动重新打开时,会调用onResume以便变量保持当活动已结束。

有没有办法做到这一点? 如果没有,有没有办法在活动关闭后保留变量的 state? 我曾尝试使用 SharedPreference 但我无法使用它们,因为我的变量与提供的变量类型不同。

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

@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);
}

这是有关处理关键事件的 更多信息


虽然看起来您想要做的只是保留您活动的 state。 最好的方法是在退出之前存储您的数据,并在您重新创建活动时调用它。

如果您想存储临时数据(我的意思是不要在两次引导之间保存),一种方法是使用sharedPreferences

//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)

由于您不能使用 sharedPreferences(因为您不使用原始类型),另一种方法是使用全局 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; }
}

然后就用...

StorageClass.getInstance().setData1(someValue);

... 和...

StorageClass.getInstance().getData1(someValue);

在 Kotlin...

object Singleton{
    var data1
}

你用哪个...

Singleton.data1 = someValue    //Before closing.
someValue = Singleton.data1    //When restarting the activity.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM