Объявив переменную в контексте приложения вы можете использовать её в качестве глобальной переменной. Вы можете задавать ей значение и получать из неё значение в любом месте приложения ( activity / broadcast recieiver / service ) из контекста приложения.
Используя этот способ, становится проще следовать шаблону SINGLETON и шаблону MVC в android.
Здесь показано решение проблемаы, заключающейся в том, как сохранить значение (переменной) проходя через несколько Activity и во всех других частях вашего приложения. Кончно Вы можете добиться этого, создав статическую переменную, но это приведёт к утечке памяти. Путь в Android - связать вашу переменную с контекстом приложения.
Каждое приложение имеет контекст, и Android гарантирует, что Application context будет существовать как экземпляр в любом месте вашего приложения.
Чтобы сделать это - надо создать класс, порождённый от android.app.Application и указать свой класс в теге Application в вашем файле AndroidManifest.xml. Android создаст экземпляр этого класса и сделает его доступным для всего контекста приложения. Вы можете получить объект своего класса в любом месте приложения (activity / broadcast reciever / service) используя метод Context.getApplicationContext().
package com.androidexample.globalvariable; import android.app.Application; 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; } }
<?xml version="1.0" encoding="utf-8" ?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=".....your package ...." android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="9" /> <application android:name=".GlobalClass" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".FirstScreen" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondScreen"></activity> <activity android:name=".ThirdScreen"></activity> </application> </manifest>
package .... your packagename .....; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import android.content.Intent; public class FirstScreen extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.firstscreen); final Button secondBtn = (Button) findViewById(R.id.second); // Calling Application class (see application tag in AndroidManifest.xml) final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); //Set name and email in global/application context globalVariable.setName("Android Example context variable"); globalVariable.setEmail("xxxxxx@aaaa.com"); secondBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(getBaseContext(), SecondScreen.class); startActivity(i); } }); } }
package com.androidexample.globalvariable; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class SecondScreen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondscreen); TextView showGlobal = (TextView) findViewById(R.id.showGlobal); final Button thirdBtn = (Button) findViewById(R.id.third); // Calling Application class (see application tag in AndroidManifest.xml) final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); // Get name and email from global/application context final String name = globalVariable.getName(); final String email = globalVariable.getEmail(); String showString = "Name : "+name+", Email : "+email; // Show name/email values in TextView showGlobal.setText(showString); thirdBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(getBaseContext(), ThirdScreen.class); startActivity(i); } }); } @Override protected void onDestroy() { super.onDestroy(); } }
package com.androidexample.globalvariable; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ThirdScreen extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.thirdscreen); TextView showGlobal = (TextView) findViewById(R.id.showGlobal); // Calling Application class (see application tag in AndroidManifest.xml) final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); // Get name and email from global/application context final String name = globalVariable.getName(); final String email = globalVariable.getEmail(); String showString = "Name : "+name+ ", Email : "+email; // Show name/email values in TextView showGlobal.setText(showString); } }