如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。
首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
下面给出例子:
MyApplication.java
package com.example.applicationdemo;
import android.app.Application;
public class MyApplication extends Application {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = this.num + num;
}
@Override
public void onCreate() {
setNum(100);
super.onCreate();
}
}
FirstActivity.java
package com.example.applicationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class FirstActivity extends Activity {
private Button button;
private EditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
button = (Button) findViewById(R.id.button);
editText = (EditText) findViewById(R.id.editext);
editText.setText("");
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int num = Integer.parseInt(editText.getText().toString().trim());
MyApplication myApplication = (MyApplication) getApplication();
myApplication.setNum(num);
System.out.println(myApplication.getNum());
startActivity(new Intent(FirstActivity.this,
SecondActivity.class));
}
});
}
}
SecondActivity.java
package com.example.applicationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class SecondActivity extends Activity {
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
textView = (TextView) findViewById(R.id.textView);
MyApplication myApplication = (MyApplication) getApplication();
textView.setText(myApplication.getNum()+"");
}
}
first.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/editext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入加数" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/editext"
android:text="设置num=num+100" />
</RelativeLayout>
second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
修改配置文件ApplicationManifest.xml,将要运行的应用程序MyApplication加进去:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.applicationdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<application
android:name=".MyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" >
</activity>
</application>
</manifest>