我该如何创建全局变量,使其在应用程序的生命周期内保持值不变,而不管运行哪个活动。
我该如何创建全局变量,使其在应用程序的生命周期内保持值不变,而不管运行哪个活动。
您可以扩展基础android.app.Application
类并像此处一样添加成员变量:
public class MyApplication extends Application {
private String someVariable;
public String getSomeVariable() {
return someVariable;
}
public void setSomeVariable(String someVariable) {
this.someVariable = someVariable;
}
}
在你的Android清单文件中,你必须声明实现android.app.Application的类(将android:name=".MyApplication"
属性添加到现有的application标签中):
<application
android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
然后在您的活动中,您可以这样获取和设置变量:
// set
((MyApplication) this.getApplication()).setSomeVariable("foo");
// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
你可以像这样使用单例模式
:
package com.ramps;
public class MyProperties {
private static MyProperties mInstance= null;
public int someValueIWantToKeep;
protected MyProperties(){}
public static synchronized MyProperties getInstance() {
if(null == mInstance){
mInstance = new MyProperties();
}
return mInstance;
}
}
在您的应用程序中,您可以通过以下方式访问单例:
MyProperties.getInstance().someValueIWantToKeep
这个全局变量适用于我的项目:
public class Global {
public static int ivar1, ivar2;
public static String svar1, svar2;
public static int[] myarray1 = new int[10];
}
// How to use other or many activity
Global.ivar1 = 10;
int i = Global.ivar1;
您可以使用应用首选项。只要传递Context对象,它们就可以从任何活动或代码片段中访问,并且它们对使用它们的应用程序是私有的,因此您不必担心暴露特定于应用程序的值,除非您处理路由设备。即使如此,您也可以使用哈希或加密方案保存这些值。此外,这些首选项存储在应用程序运行到下一次之间。
这里有一些代码示例供您查看。使用SharedPreferences来存储和检索全局变量。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userid = preferences.getString("userid", null);
您想要的内容有几种不同的实现方式。
1.) 扩展应用程序类并在其中实例化控制器和模型对象。
public class FavoriteColorsApplication extends Application {
private static FavoriteColorsApplication application;
private FavoriteColorsService service;
public FavoriteColorsApplication getInstance() {
return application;
}
@Override
public void onCreate() {
super.onCreate();
application = this;
application.initialize();
}
private void initialize() {
service = new FavoriteColorsService();
}
public FavoriteColorsService getService() {
return service;
}
}
public class FavoriteColorsActivity extends Activity {
private FavoriteColorsService service = null;
private ArrayAdapter<String> adapter;
private List<String> favoriteColors = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorite_colors);
service = ((FavoriteColorsApplication) getApplication()).getService();
favoriteColors = service.findAllColors();
ListView lv = (ListView) findViewById(R.id.favoriteColorsListView);
adapter = new ArrayAdapter<String>(this, R.layout.favorite_colors_list_item,
favoriteColors);
lv.setAdapter(adapter);
}
2.) 您可以让控制器创建一个单例实例:
public class Controller {
private static final String TAG = "Controller";
private static sController sController;
private Dao mDao;
private Controller() {
mDao = new Dao();
}
public static Controller create() {
if (sController == null) {
sController = new Controller();
}
return sController;
}
}
然后您可以从任何活动或片段中调用create方法,如果尚未存在控制器,则会创建新的控制器,否则将返回预先存在的控制器。
3.) 最后,有一个由Square创建的精简框架,在Android内提供依赖注入。它被称为Dagger。我不会在这里解释如何使用它,但如果您需要这种东西,它非常好用。
希望我已经详细说明了您所希望的内容。
请尝试以下方法:
创建一个共享数据类:
SharedData.java
import android.app.Application;
/**
* Created by kundan on 6/23/2015.
*/
public class Globals {
private static Globals instance = new Globals();
// Getter-Setters
public static Globals getInstance() {
return instance;
}
public static void setInstance(Globals instance) {
Globals.instance = instance;
}
private String notification_index;
private Globals() {
}
public String getValue() {
return notification_index;
}
public void setValue(String notification_index) {
this.notification_index = notification_index;
}
}
onCreate()
方法之前使用以下代码):Globals sharedData = Globals.getInstance();
设置数据:
sharedData.setValue("kundan");
获取数据:
String n = sharedData.getValue();
Global Class
:
public class GlobalClass extends Application{
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String aName) {
name = aName;
}
public String getEmail() {
return email;
}
public void setEmail(String aEmail) {
email = aEmail;
}
}
<application
android:name="com.example.globalvariable.GlobalClass" ....
final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
globalVariable.setName("Android Example context variable");
final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
final String name = globalVariable.getName();
public interface ActivityClass {
public static final String MYSTRING_1 = "STRING";
public static final int MYINT_1 = 1;
}
然后你可以通过以下方式在类中访问到任何地方:
int myInt = ActivityClass.MYINT_1;
String myString = ActivityClass.MYSTRING_1;
// My Class Global Variables Save File Global.Java
public class Global {
public static int myVi;
public static String myVs;
}
// How to used on many Activity
Global.myVi = 12;
Global.myVs = "my number";
........
........
........
int i;
int s;
i = Global.myVi;
s = Global.myVs + " is " + Global.myVi;