Context——Context的使用

转自http://blog.csdn.net/android_tutor/article/details/8026018

Context大致可以分为两种:一是传递Context参数,二是调用全局的Context.

其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml文件里其实是默认的

    <application  
           android:icon="@drawable/ic_launcher"  
           android:label="@string/app_name"  
           >  
           <activity  
               android:name=".ApplicationDemoActivity"  
               android:label="@string/app_name" >  
               <intent-filter>  
                   <action android:name="android.intent.action.MAIN" />  
                   <category android:name="android.intent.category.LAUNCHER" />  
               </intent-filter>  
           </activity>  
       </application>  

这个Application类是单例的,也就是说我们可以自己写个Application(比如名为:MainApplication)类,来代替默认的Applicaiton,这个类可以保存应用的全局变量,我们可以定义一个全局的Context.供外部调用.用法如下:
    package com.tutor.application;  
      
    import android.app.Application;  
    import android.content.Context;  
      
    public class MainApplication extends Application {  
      
        /** 
         * 全局的上下文. 
         */  
        private static Context mContext;  
          
        @Override  
        public void onCreate() {  
            super.onCreate();  
              
            mContext = getApplicationContext();  
              
        }     
          
        /**获取Context. 
         * @return 
         */  
        public static Context getContext(){  
            return mContext;  
        }  
          
          
        @Override  
        public void onLowMemory() {  
            super.onLowMemory();  
        }  
          
          
    }  
我们需要在AndroidMainifest.xml把MainApplication注册进去(第10行代码):

    <?xml version="1.0" encoding="utf-8"?>  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        package="com.tutor.application"  
        android:versionCode="1"  
        android:versionName="1.0" >  
          
        <application  
            android:icon="@drawable/ic_launcher"  
            android:label="@string/app_name"  
            android:name=".MainApplication" >  
            <activity  
                android:name=".ApplicationDemoActivity"  
                android:label="@string/app_name" >  
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />  
                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
            </activity>  
        </application>  
          
    </manifest>  

工具类ToolsUtil.java

ackage com.tutor.application;  
  
import android.content.Context;  
import android.widget.Toast;  
  
/** 
 * @author frankiewei. 
 * 应用的一些工具类. 
 */  
public class ToolUtils {  
      
    /** 
     * 参数带Context. 
     * @param context 
     * @param msg 
     */  
    public static void showToast(Context context,String msg){  
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();  
    }  
      
    /** 
     * 调用全局的Context. 
     * @param msg 
     */  
    public static void showToast(String msg){  
        Toast.makeText(MainApplication.getContext(), msg, Toast.LENGTH_SHORT).show();  
    }  
}  
新建一个View命名为MainView.java就是我们Activity现实的View.代码如下:
package com.tutor.application;  
  
import android.app.Activity;  
import android.content.Context;  
import android.util.AttributeSet;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.widget.Button;  
import android.widget.FrameLayout;  
  
/** 
 * @author frankiewei. 
 * 自定义的MainView. 
 */  
public class MainView extends FrameLayout implements View.OnClickListener{  
      
    private Context mContext;  
      
    private Activity mActivity;  
      
    /** 
     * 参数Button. 
     */  
    private Button mArgButton;  
      
    /** 
     * 全局Button. 
     */  
    private Button mGlobleButton;  
      
    /** 
     * 退出Button. 
     */  
    private Button mExitButton;  
      
    public MainView(Context context){  
        super(context);  
        setupViews();  
    }  
  
    public MainView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        setupViews();  
    }  
      
      
    private void setupViews(){  
        //获取View的上下文.  
        mContext = getContext();  
        //这里将Context转换为Activity.  
        mActivity = (Activity)mContext;  
        LayoutInflater inflater = LayoutInflater.from(mContext);  
        View v = inflater.inflate(R.layout.main, null);  
        addView(v);  
          
        mArgButton = (Button)v.findViewById(R.id.arg_button);  
        mGlobleButton = (Button)v.findViewById(R.id.glo_button);  
        mExitButton = (Button)v.findViewById(R.id.exit_button);  
          
        mArgButton.setOnClickListener(this);  
        mGlobleButton.setOnClickListener(this);  
        mExitButton.setOnClickListener(this);  
    }  
  
    public void onClick(View v) {  
        if(v == mArgButton){  
            ToolUtils.showToast(mContext, "我是通过传递Context参数显示的!");  
        }else if(v == mGlobleButton){  
            ToolUtils.showToast("我是通过全局Context显示的!");  
        }else{  
            mActivity.finish();  
        }  
    }  
  
} 

这里MainView.java使用的布局main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="Welcome to frankie wei's blog."   
        />  
      
    <Button  
        android:id="@+id/arg_button"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="传递Context参数"  
        />  
      
    <Button  
        android:id="@+id/glo_button"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="全局的Context"  
        />  
      
    <Button  
        android:id="@+id/exit_button"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="退出App"  
        />  
  
</LinearLayout> 

修改ApplicationDemoActivity.java,代码如下
    package com.tutor.application;  
      
    import android.app.Activity;  
    import android.os.Bundle;  
      
    public class ApplicationDemoActivity extends Activity {  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
              
            MainView mMainView = new MainView(this);  
            setContentView(mMainView);  
         
        }  
          
    }  


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值