Android中Application使用,保存应用程序全局变量

来源:互联网 发布:工程宝软件使用说明 编辑:程序博客网 时间:2024/06/04 08:07

简介

Android各个组件之间(比如activity之间)难免需要访问一些应用程序级的变量,Application对象是一个不错的选择。Application在Android中代表一个应用程序实例,当一个应用程序被启动时,Android平台会为其创建一个Application对象,以代表该应用程序,它可以用来保存一些应用程序级变量(比如微信支付状态),供应用中的各个组件访问。我们可以自定义个个类集成Application,并在其中定义我们的全局变量,这样在应用程序的认可地方就可以访问这些变量了。

示例

功能

我们定义了一个Application类的子类,并在其中定义了一个变量value,在一个activity钟显示此value,在另一个activity中读取并修改此value,返回后在前一个activity可以看到修改后的值。

代码

Application定义

文件com/example/fxgandroid/applicationtest/LocalApplication.java
public class LocalApplication extends Application {
// 测试变量
public String value = "测试变量";
}

activity(显示Application  value变量值)布局文件及java代码

布局文件res/layout/activity_custom_application.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/application_desc" />
    <Button
        android:id="@+id/btn_application_test"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@drawable/selector_bg_rectangle_gray123"
        android:gravity="center"
        android:text="@string/application_show"
        android:textColor="@android:color/black" />
    <TextView
        android:id="@+id/txv_application_value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_appvalue_reset"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@drawable/selector_bg_rectangle_gray123"
        android:gravity="center"
        android:text="@string/reset_in_activity1"
        android:textColor="@android:color/black" />
</LinearLayout>
java代码 com/example/fxgandroid/applicationtest/CustomApplicationActivity.java
public class CustomApplicationActivity extends Activity {
private TextView txvApplicationValue;
private Button btnAppValueReset;
private LocalApplication localApplication;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_application);
// 获取application唯一实例
localApplication = (LocalApplication) getApplication();
//
initView();
initListener();
}
private void initListener() {
btnAppValueReset.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(CustomApplicationActivity.this, ChangeAppValueActivity.class);
startActivity(intent);
}
});
}
private void initView() {
txvApplicationValue = (TextView) findViewById(R.id.txv_application_value);
btnAppValueReset = (Button) findViewById(R.id.btn_appvalue_reset);
}
protected void onResume() {
super.onResume();
// 将application变量值显示在textview中,我们将此值得显示放在 onResume
// 方法中,以便此activity每次显示时都能读取最新的值
String value = localApplication.value;
txvApplicationValue.setText(value);
}
}

activity(修改Application  value变量值)布局文件及java代码

布局文件 res/layout/activity_change_appvalue.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/txv_application_value"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/edt_application_newvalue"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/selector_bg_rectangle_gray123"
        android:hint="@string/hint_application_value_reset" />
    <Button
        android:id="@+id/btn_reset"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@drawable/selector_bg_rectangle_gray123"
        android:gravity="center"
        android:text="@string/application_show"
        android:textColor="@android:color/black" />
</LinearLayout>
java代码 com/example/fxgandroid/applicationtest/ChangeAppValueActivity.java
public class ChangeAppValueActivity extends Activity {
private TextView txvApplicationValue;
private EditText edtApplicationNewValue;
private Button btnResetApplicationValue;
private LocalApplication localApplication;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_change_appvalue);
localApplication = (LocalApplication) getApplication();
initView();
initListenr();
refreshView();
}
private void refreshView() {
txvApplicationValue.setText(localApplication.value);
}
private void initListenr() {
btnResetApplicationValue.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String newValue = edtApplicationNewValue.getText().toString();
localApplication.value = newValue;
refreshView();
}
});
}
private void initView() {
txvApplicationValue = (TextView) findViewById(R.id.txv_application_value);
edtApplicationNewValue = (EditText) findViewById(R.id.edt_application_newvalue);
btnResetApplicationValue = (Button) findViewById(R.id.btn_reset);
}
}

运行效果



注意

Android官方文档指出:我们通常不需要集成Application类,一个静态的单列既可以实现上述全局变量共享的功能。哈哈,废话了


0 0
原创粉丝点击