我希望在创建活动之前或至少在启动活动之前设置“选项”。如果有办法通过AndroidManifest做到这一点?考虑这个例子,我们有一个全局配置类,在onCreate中用来实例化一个对象(为简洁起见,不完全是OO)
public class Global {
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);
}
}
显然,在这种情况下,“可见”将是“假的”。如果这是某种API库,我们希望为用户提供将“可见”设置为“true”的选项。
更新1
目标是将全局类放在预编译的库中,并由开发人员利用该库设置其值。我正在寻找开发人员在创建应用程序时执行此操作的最简单方法;我认为清单可能是要走的路,但我不知道如何通过xml注入“可见”的值。以下使用首选项的答案很好,但只涵盖用户的观点。
更新2 恕我直言,使用资源在这里效果最好。
<bool name="visible">true</bool>
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
Resource res = getResource();
MyObject obj = new MyObject(res.getBoolean(R.bool.visible));
}
}
答案 0 :(得分:1)
我认为使用SharedPreferences会使用Global.visible
作为默认值来执行您要查找的内容。然后,如果用户将其更改为true
,则会使用该值。
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"MyVisiblePreference",
Global.visible);
MyObject obj = new MyObject(makeVisible);
要在不重新编译或设置(通过“首选项”活动)的情况下允许首选项可更新,您可以从resources
加载默认首选项:
<bool name="MyVisiblePreference">true</bool>
以类似方式引用它:
boolean makeVisible = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"MyVisiblePreference",
getResources().getBoolean(R.bool.MyVisiblePreference));
如果开发者未将偏好设置为false
,则默认为true
(基于resources
值)。
答案 1 :(得分:0)
对于简单对象,您可以像这样创建它们:(基于您的代码示例)
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);
}
}
对于更复杂的对象,您可以使用static initializer进行初始化,如下所示:
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);
}
}
答案 2 :(得分:0)
您可以继承android.app.Application
,此类包含您可以覆盖的方法onCreate
。您的子类必须在AndroidManifest.xml
的{{1}}中定义。在创建应用程序中的所有其他组件之前(在任何<application name="YourApplication">
或onCreate
之前)调用应用程序的Activity
。