2

我在处理 Activity 中的 onCreate() 时遇到了一个主要问题。就像线程说的,我只能在主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()从返回时第二次执行时MyChildAppwascalled应该已经设置为true。然而事实并非如此。并且onCreate()每次从MyChildApp.

有人对此有建议吗?提前非常感谢。

4

3 回答 3

1

定义SharedPreferences并最初存储一个值0/false以显示 was called()从未被调用过。

现在,当第一次调用 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()
于 2012-08-16T15:52:08.663 回答
0

当您从 MyChildApp 返回时,myApp 正在重新创建,因此再次调用 onCreate,并再次初始化变量(这就是 wascall 始终为 false 的原因)。

一种可能的解决方案是在 SharePreferences 中存储 was called 状态

于 2012-08-16T15:46:22.160 回答
0

wascalled将始终为 false,因为它是 Activity 实例的一部分。它在您的活动中声明:

private boolean wascalled = false;

当重新创建活动时,所有实例变量都被初始化为它们的默认值,这就是你得到 always 的原因false

如果您注意该线程的代码,您会注意到它wascalled是另一个类的一部分,而不是 Activity 的类。

if (!YourApplicationInstance.wasCalled) {
}

在这个具体的例子中,YourApplicationInstance是一个单独的类,它保持wascalled变量的状态。

于 2012-08-16T15:47:57.760 回答