每当我的Android应用程序启动时,我都需要执行一些代码,以便我可以初始化我的mainActivity菜单。菜单应该仅在应用程序启动时初始化,并且应该记住所选的菜单项,例如当我从其他子项Activies返回mainActivity时(即在按下后退或向上按钮之后)。
我已经尝试过使用onCreate事件,sharedPreference和getIntent()函数,但它们不适合那个pourpose。我需要与onLoad()HTML页面事件类似的东西。有帮助吗?
1)OnCreate在设备旋转,键盘打开或切换应用程序时调用,系统决定是时候回收一些内存并终止你的应用程序。 OnCreate与应用程序lyfecycle无关,而只与Activity Lifecycle有关。如果你没有在清单中使用android:launchmode = singleTop,当你使用“向上”按钮返回主活动时也会调用它。是的,你可以存储你以前的状态...结束恢复onResume,但它似乎很棘手,不自然。
2)每当我从其他子活动(在某些情况下)返回主Activity时,getIntent()返回相同的操作。
3)我可以使用sharedPreference永久存储一个值,但是当我重新启动应用程序时,该值具有设置的最后一个值,如果该应用程序刚刚启动,我无法知道这一点。
如果你不同意这些句子,请提供一个证明我错的例子。我尝试了很多解决方案。
我会尽力给出一个完整的答案。如果您只需要在应用程序启动时执行某些代码,那么您可以创建自定义Application类。你可以这样做:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//Here you can put your startup logic
}
}
然后,您必须修改manifest.xml文件中的标记。您需要告诉它应用程序必须是您定义的应用程序,您可以这样做:
<application
android:name=".MyApplication"
...
>
显然,我假设您的MyApplication类位于应用程序的基础包中。
但是,从我在你的帖子中阅读的内容来看,你需要与此不同的东西。您无法从Application设置UI,因为还没有UI,而UI只是一个Activity(当然还有它的子)可以拥有的。我会进一步调查你在onCreate方法中做了什么。您是否每次在调用创建时设置所选菜单项?如果是这样,您可以在共享首选项中编写实际选定的菜单项。您可以在每次选择不同的菜单项时更新此值,然后,在onCreate中,您只需从共享首选项中读取此值并选择已保存的项目,而不仅仅是“默认项目”。
这是我的例子:
public class MainApplication extends Application {
private static Resources mResources;
@Override
public void onCreate() {
super.onCreate();
mResources = this.getApplicationContext().getResources();
}
public static String getStringResource(int resId) {
return mResources.getString(resId);
}
}
不要忘记在AndroidManifest.xml中添加这个新应用程序:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.example">
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最后你可以像这样使用初始化:
public class DetailModel {
private String title;
public DetailModel(boolean aFlag) {
if(aFlag) {
title = movieData.getTitle();
} else {
title = MainApplication.getStringResource(R.string.default_title);
}
}
public String getTitle() {
return title;
}
public void setTitle(String t) {
this.title = t;
}
}
希望这可以帮助