我在Activity中处理onCreate()时遇到了一个主要问题。就像thread所说的那样,我只能在主Activity的onCreate()方法中执行一段代码。所以我按照该线程中的步骤执行以下操作:
/*I've updated the code to SharePreferences version*/
public class MyApp extends Activity {
private static RMEFaceAppActivity instance;
private boolean wascalled = false;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//initiate some buttons here
sharedPreferences = this.getSharedPreferences("test",0);
editor = sharedPreferences.edit();
if(sharedPreferences.getString("wascalled", "false").equalsIgnoreCase("false"))
{
//work can only be done once
editor.putString("wascalled", "true");
editor.commit();
}
//set buttons to listener methods
}
void onClick(View arg0)
{
if(arg0.getId() == R.id.button1)
{
Intent intent = new Intent(this, MyChildApp.class);
startActivity(intent);
}
}
}
在MyChildApp课程中,我在那里完成工作时调用了finish()
。但是,字段wascalled
始终为false。我想当onCreate()
从MyChildApp
返回时第二次执行时,wascalled
应该已经设置为true。但事实并非如此。每次从onCreate()
返回时,MyChildApp
方法中的if语句中的代码都会执行。
有人对此提出建议吗?非常感谢。
答案 0 :(得分:1)
定义 SharedPreferences 并初始存储一个值0/false
,以表明wascalled()从不被调用。
现在,当第一次调用wasCalled时,将此SharedPreference变量的值更新为1/true
。
下次运行onCreate()
时,检查SharedPreference中变量的值,如果值为1 / true,则不要再次执行该值。
实施SharedPreferences的代码:
final String PREF_SETTINGS_FILE_NAME = "PrefSettingsFile";
int wasCalledValue;
onCreate() {
....
SharedPreferences preferences = getSharedPreferences(PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
wasCalledValue= preferences.getInt("value", 0);
if(wasCalledValue == 0)
{
// execute the code
//now update the variable in the SharedPreferences
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("value", 1);
editor.commit();
}
else if(wasCalledValue == 1)
{
//skip the code
}
} // end of onCreate()
答案 1 :(得分:0)
当您从MyChildApp返回时,myApp正在重新创建,因此再次调用onCreate,并再次初始化变量(这就是为什么被称为始终为假的原因)。
其中一种可能的解决方案是在SharePreferences
中存储iscalled状态答案 2 :(得分:0)
wascalled
将始终为false,因为它是Activity实例的一部分。它是在你的活动中宣布的:
private boolean wascalled = false;
重新创建活动时,所有实例变量都会初始化为默认值,这就是您始终false
的原因。
如果您注意thread中的代码,您会注意到wascalled
是另一个类的一部分,而不是Activity的类。
if (!YourApplicationInstance.wasCalled) {
}
在这个具体的例子中,YourApplicationInstance
是一个单独的类,它使状态wascalled
变量。