如何不在 onBackPressed 中销毁 activity?
How not to destroy activity in onBackPressed?
我需要在调用onBackPressed
方法时,activity不被销毁而是暂停停止
我的想法是,它的工作方式类似于按下手机的主页按钮,它会调用 onPause
和 onStop
,因为那样的话,activity 不会被破坏,并且当activity 重新打开,调用 onResume
以便变量保持 activity 关闭时的值。
有什么办法吗?如果没有,有没有办法在 activity 关闭后保持变量的状态?我尝试使用 SharedPreference 但我无法使用它们,因为我的变量类型与提供的变量类型不同。
如果您想自定义按钮的行为,您必须在 activity ...
中使用
@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);
}
这里是some more information关于处理按键事件。
虽然看起来你想要做的只是保持你 activity 的状态。最好的方法是在退出之前存储您的数据,并在您重新创建 activity.
时调用它
如果你想存储临时数据(我的意思是不在两次启动之间保存它),一种方法是使用 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(因为您不使用原始类型),另一种方法是使用全局单例。
这是一个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.
我需要在调用onBackPressed
方法时,activity不被销毁而是暂停停止
我的想法是,它的工作方式类似于按下手机的主页按钮,它会调用 onPause
和 onStop
,因为那样的话,activity 不会被破坏,并且当activity 重新打开,调用 onResume
以便变量保持 activity 关闭时的值。
有什么办法吗?如果没有,有没有办法在 activity 关闭后保持变量的状态?我尝试使用 SharedPreference 但我无法使用它们,因为我的变量类型与提供的变量类型不同。
如果您想自定义按钮的行为,您必须在 activity ...
中使用@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);
}
这里是some more information关于处理按键事件。
虽然看起来你想要做的只是保持你 activity 的状态。最好的方法是在退出之前存储您的数据,并在您重新创建 activity.
时调用它如果你想存储临时数据(我的意思是不在两次启动之间保存它),一种方法是使用 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(因为您不使用原始类型),另一种方法是使用全局单例。
这是一个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.