In this example defining variable in application context and you can use this variable as a Global variable. You can set value in this variable and get value on any activity / broadcast recieiver / service in application context(environment).
In Further examples you will see good use of this way to follow SINGALTON pattern and MVC pattern in android.
In Further examples you will see good use of this way to follow SINGALTON pattern and MVC pattern in android.
The problem is how to save value across several Activities and all parts of your application context. You can achieve this by creating static variable but it is not the good way it influencing towards memory leaks. The way in Android is to associate your variable with the Application context.
Every Application has a context, and Android guarantees that Application context will exist as a instance across your application.
The way to do this is to create a class and extends with android.app.Application, and specify your class in the application tag in your AndroidManifest.xml file. Android will create an instance of that class and make it available for your entire application context. You can get object of your class on any activity / broadcast reciever / service in application context(environment) by Context.getApplicationContext() method.
Every Application has a context, and Android guarantees that Application context will exist as a instance across your application.
The way to do this is to create a class and extends with android.app.Application, and specify your class in the application tag in your AndroidManifest.xml file. Android will create an instance of that class and make it available for your entire application context. You can get object of your class on any activity / broadcast reciever / service in application context(environment) by Context.getApplicationContext() method.
Project Structure :
File : src/GlobalClass.java
Create your custom class subclass of android.app.Application class. you will use this class as global class for your Application environment(Conext).
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;
}
}
File : AndroidManifest.xml
Assign GlobalClass.java in application tag, see this line in application tag android:name="com.androidexample.globalvariable.GlobalClass"
After assign you can get GlobalClass.java instance on any activity / broadcast reciever / service in application context.
After assign you can get GlobalClass.java instance on any activity / broadcast reciever / service in application context.
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
package
=
"com.androidexample.globalvariable"
android:versionCode
=
"1"
android:versionName
=
"1.0"
>
<
uses-sdk
android:minSdkVersion
=
"8"
android:targetSdkVersion
=
"9"
/>
<
application
android:name
=
"com.androidexample.globalvariable.GlobalClass"
android:allowBackup
=
"true"
android:icon
=
"@drawable/ic_launcher"
android:label
=
"@string/app_name"
android:theme
=
"@style/AppTheme"
>
<
activity
android:name
=
"com.androidexample.globalvariable.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
>
File : src/FirstScreen.java
getApplicationContext() method of Context will give GlobalClass.java instance and set name/email values and maintain state of GlobalClass.java instance.
package
com.androidexample.globalvariable;
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);
}
});
}
}
File : src/SecondScreen.java
Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.
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(); } } |
File : src/ThirdScreen.java
Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.
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); } } |
沒有留言:
張貼留言