Android Studio开发基础之Context用法说明

来源:互联网 发布:xnview mac 中文版 编辑:程序博客网 时间:2024/06/05 17:04

1、Context说明       

       Context是一个用于访问全局信息的接口,如应用程序的资源(如图片,字符串等),一些常用的组件继承自Context,如Activity和Service等等。

       如利用Java代码创建一个textView,textView的第一种setText()方法直接传入一个字符串,第二种setText()方法传入一个整形的id(位于values\\strings.xml下面的hello_world,即:<string name="hello_world">Hello world!</string>),最后将setContextView改为setContextView(textView)。

public class MainActivity extends ActionBarActivity {    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        textView=new TextView(MainActivity.this);        //textView.setText("Hello GeoStorm");        textView.setText(R.string.hello_world);                setContentView(textView);    }}
       以上代码中,双击第一个setText()方法,按F4,即可看到该构造函数,入口参数为字符串。

public final void setText(CharSequence text) {        setText(text, mBufferType);    }
       双击第一个setText()方法,按F4,即可看到该构造函数,入口参数为resid,其内部的setText()即为第一个setText()方法,getContext()即为我们创建TextView时传入的MainActivity.this!!!
    public final void setText(int resid) {        setText(getContext().getResources().getText(resid));    }

       在看了构造函数之后,我们也可以按照构造函数里的,进行下面的原始写法:

    //textView.setText(R.string.hello_world);    textView.setText(getApplicationContext().getResources().getText(R.string.hello_world));
       同样,我们也可以访问图片资源:
public class MainActivity extends ActionBarActivity {    private TextView textView;    private ImageView imageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        //textView=new TextView(MainActivity.this);        //textView.setText("Hello GeoStorm");        //textView.setText(R.string.hello_world);        //textView.setText(getApplicationContext().getResources().getText(R.string.hello_world));                imageView=new ImageView(this);//可以直接使用this        imageView.setImageResource(R.mipmap.ic_launcher);        setContentView(imageView);    }}

2、Application的应用及说明

       现在我们用Context来实现组件之间信息的共享。创建一个App.java类用来传递数据,继承自Application,增加一个字符串变量,并添加读写构造函数,如下:

package com.example.lhb.context;import android.app.Application;public class App extends Application {    public String S="DefaultString";    public void setS(String s) {        S = s;    }    public String getS() {        return S;    }}
       接下来进行AndroidManifest配置:在Application中加入android:name=".App",并添加另一个Activity,名为Main2。在配置文件中加入跟MainActivity一样的配置,其中 <action android:name="android.intent.action.MAIN" />说明在手机桌面上出现两个应用程序。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.lhb.context" >    <application        android:name=".App"        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="Main1" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".MainActivity2Activity"            android:label="Main2" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
       Main1中和Main2加入如下同样的代码:

package com.example.lhb.context;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends ActionBarActivity {    private TextView textView;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView= (TextView) findViewById(R.id.textView);        editText= (EditText) findViewById(R.id.editText);        //读取默认的字符串        textView.setText("共享的数据是:"+((App)getApplicationContext()).getS());        findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ((App)getApplicationContext()).setS(editText.getText().toString());                textView.setText(String.format("共享的数据是:%s",editText.getText().toString()));            }        });    }}
效果如下:

          

3、Application生命周期

       重写构造函数并执行,结果发现App.java的onCreate()函数在任何一个Activity的onCreate()函数之前执行,这对于我们做初始化操作非常有用。

package com.example.lhb.context;import android.app.Application;public class App extends Application {    public String S="DefaultString";    public void setS(String s) {        S = s;    }    public String getS() {        return S;    }    @Override    //创建时执行    public void onCreate() {        super.onCreate();        System.out.println("App OnCreate");    }    @Override    //结束时执行,一般不执行,只在模拟环境中执行    public void onTerminate() {        super.onTerminate();        System.out.println("App on Terminate");    }    @Override    //低内存时执行    public void onLowMemory() {        super.onLowMemory();    }    @Override    //清理内存时执行    public void onTrimMemory(int level) {        super.onTrimMemory(level);    }}





0 0
原创粉丝点击