Android:如何在调用onCreate之前设置静态值
我希望在创建活动之前或至少在活动开始之前设置“选项”。是否有办法通过AndroidManifest实现这一点?考虑这个例子,我们有一个全局配置类,用于在OnCuto中实例化一个对象(不是完全面向OO) 显然,在这种情况下,“可见”将是“假”。如果这是某种API库,我们希望为用户提供将“可见”设置为“真”的选项 更新1 目标是在预编译库中拥有全局类,并由使用该库的开发人员设置其值。我正在寻找开发人员在创建应用程序时实现这一点的最简单方法;我认为清单可能是最好的选择,但我不知道如何通过xml为“可见”注入值。下面使用首选项的答案很好,但仅涵盖用户的观点 更新2 IMHO在这里使用资源效果最好Android:如何在调用onCreate之前设置静态值,android,Android,我希望在创建活动之前或至少在活动开始之前设置“选项”。是否有办法通过AndroidManifest实现这一点?考虑这个例子,我们有一个全局配置类,用于在OnCuto中实例化一个对象(不是完全面向OO) 显然,在这种情况下,“可见”将是“假”。如果这是某种API库,我们希望为用户提供将“可见”设置为“真”的选项 更新1 目标是在预编译库中拥有全局类,并由使用该库的开发人员设置其值。我正在寻找开发人员在创建应用程序时实现这一点的最简单方法;我认为清单可能是最好的选择,但我不知道如何通过xml为“可见
<bool name="visible">true</bool>
对于简单对象,您可以这样创建它们:(基于您的代码示例) 对于更复杂的对象,可以使用如下方法初始化:
public static boolean visible;
static {
visible = false;
}
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// here is where we want the most up-to-date value of visible
MyObject obj = new MyObject(Global.visible);
}
}
您可以将
android.app.Application
子类化,该类具有可重写的方法onCreate
。您的子类必须在
中的AndroidManifest.xml
中定义<在创建应用程序中的所有其他组件之前(在任何活动或服务之前)调用应用程序的code>onCreate
。我认为使用SharedReferences可以满足您的需要,使用全局.visible
作为默认值。然后,如果用户将其更改为true
,它将使用该值
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"MyVisiblePreference",
Global.visible);
MyObject obj = new MyObject(makeVisible);
要允许首选项在无需重新编译或设置(通过“首选项”活动)的情况下可更新,可以从参考资料
加载默认首选项:
<bool name="MyVisiblePreference">true</bool>
如果开发人员没有将首选项设置为false
,它将默认为true
(基于资源
值)。这是开发人员的一个选项,但需要他们重新编译/修改源代码。有趣的是,您是否有一个示例,说明如何通过xml将值注入到覆盖的类上?不使用编译的默认类Global
,而是使用更新的答案,供开发人员更新(无需修改MyActivity
中的引用,在我的情况下,使用资源文件是最好的解决方案,因此您的回答肯定会引导我朝这个方向前进。
public static boolean visible = false;
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// here is where we want the most up-to-date value of visible
MyObject obj = new MyObject(Global.visible);
}
}
public static boolean visible;
static {
visible = false;
}
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// here is where we want the most up-to-date value of visible
MyObject obj = new MyObject(Global.visible);
}
}
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"MyVisiblePreference",
Global.visible);
MyObject obj = new MyObject(makeVisible);
<bool name="MyVisiblePreference">true</bool>
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"MyVisiblePreference",
getResources().getBoolean(R.bool.MyVisiblePreference));