zoukankan      html  css  js  c++  java
  • (四)Android中Context的理解与使用

    一、Context的作用

    Context可用于访问全局资源.

    public class MainActivity extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = new TextView(MainActivity.this);
    tv.setText("钱龙");
    tv.setText(R.string.hello_world);
    tv.setText(getResources().getText(R.string.hello_world)); //访问全局资源
    setContentView(tv);

    ImageView iv=new ImageView(this);
    iv.setImageResource(R.mipmap.ic_launcher); //访问全局资源
    setContentView(iv);

    }
    }

    二、Application的用途

    公共的布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView" />

    <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="保存"
    android:id="@+id/btnSave" />

    </LinearLayout>
    <?xml version="1.0" encoding="utf-8"?>
    AndroidManifest.xml文件:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shiyanshi.learncontext" >

    <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="LearnContext" > <!--安装的应用程序的名称-->
    <intent-filter> <!--指定该activity为启动的activity-->
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity
    android:name=".Main2Aty"
    android:label="Main2">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/> <!--必须指定为MAIN才会安装两个应用程序-->
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>

    </activity>
    </application>

    </manifest>

    1.新建一个Application类,在其中设置需要被程序访问的公共资源,此处为一个字符串

    public class App extends Application {
    private String stringData="default";

    public void setStringData(String stringData) {
    this.stringData = stringData;
    }

    public String getStringData() {
    return stringData;
    }
    }
    2.然后在AndroidManifest.xml文件中设置application的name属性为新建的类
    <application
    android:name=".App">
    3.新建一个Activity,并且使该Activity也成为一个启动Activity(即在系统中安装两个启动图标),注意要在AndroidManifest.xml文件中设置Activity的属性如上面的Main2Aty的设置,
    注意过滤器中action的name必须设置为android.intent.action.MAIN且category的name必须设置为android.intent.category.LAUNCHER,只有这样系统中才会显示有两个启动图标。
    public class Main2Aty extends Activity {
    private TextView textView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_common);
    textView= (TextView) findViewById(R.id.textView);
    editText= (EditText) findViewById(R.id.editText);
    textView.setText(getApp().getStringData());
    findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    getApp().setStringData(editText.getText().toString());
    textView.setText(getApp().getStringData());
    }
    });
    }

    App getApp()
    {
    return (App) getApplicationContext();
    }
    }
    4.主Activity
    public class MainActivity extends Activity {
    private TextView textView;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_common);
    textView= (TextView) findViewById(R.id.textView);
    editText= (EditText) findViewById(R.id.editText);
    textView.setText(getApp().getStringData());
    findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    getApp().setStringData(editText.getText().toString());
    textView.setText(getApp().getStringData());
    }
    });
    }
    App getApp()
    {
    return (App) getApplicationContext();
    }
    }
    5.注意3,4中是通过getApplicationContext()来获取自己新建的Application的子类的,然后再调用其中的方法就可以访问全局资源了。

    三、Application的生命周期

    Application的重载函数,有如下几个,onCreate在Activity的onCreate之前执行,并且每一个Activity执行之前都要执行Application的onCreate,因此可以很方便的在其中设置全局初始化信息。

    onTerminate,onLowMemory,onTrimMemory一般不会被执行。

    @Override
    public void onCreate() {
    super.onCreate();
    System.out.println("App onCreate");
    }

    @Override
    public void onTerminate() {
    super.onTerminate();
    }

    @Override
    public void onLowMemory() {
    super.onLowMemory();
    }

    @Override
    public void onTrimMemory(int level) {
    super.onTrimMemory(level);
    }
  • 相关阅读:
    windows10、windows server 2016激活方法
    .NET 和 .NET Core 使用 JWT 授权验证
    vs(vs2017、vs2019)离线安装包下载、制作
    VS顶部增加签名描述信息
    .NET WebAPI 跨域问题(has been blocked by CORS policy:No AccessControlAllowOgigin header is present on the requested resource)
    .Net 和 .Net Core 集成Swagger 以及配合JWT身份验证
    jQuery实现公告无限循环滚动
    甩掉 ashx/asmx,使用jQuery.ajaxWebService请求WebMethod,Ajax处理更加简练(转)
    JS和JQUERY常见函数封装方式
    第07组 Beta冲刺 (1/5)(组长)
  • 原文地址:https://www.cnblogs.com/ql698214/p/5098083.html
Copyright © 2011-2022 走看看