谈谈Android里的Context的使用实例

谈谈Android里的Context的使用实例,第1张

概述大家好,今天给大家分享一下Android里的Context的一些用法,以前经常有人在群里问我比如我在一个工具类里的某个方法,或者View里需要调用Context.但是工具类还有View里没有这个上下文怎么办?为了解决大家的疑问,为

大家好,今天给大家分享一下AndroID里的Context的一些用法,以前经常有人在群里问我比如我在一个工具类里的某个方法,或者VIEw里需要调用Context.但是工具类还有VIEw里没有这个上下文怎么办?为了解决大家的疑问,为了解决大家的疑问,我今天写一个简单的Demo.让大家如何学好自如的用Context.想什么时候有Context,什么时候就有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="androIDintentactionMAIN" />         <category androID:name="androIDintentcategoryLAUNCHER" />       </intent-filter>     </activity>   </application> 

这个Application类是单例的,也就是说我们可以自己写个Application(比如名为:MainApplication)类,来代替默认的Applicaiton,这个类可以保存应用的全局变量,我们可以定义一个全局的Context.供外部调用.用法如下:

package com.tutor.application;  import androIDappApplication; import androIDcontentContext;  public class MainApplication extends Application {    /**    * 全局的上下文    */   private static Context mContext;      @OverrIDe   public voID onCreate() {     superonCreate();          mContext = getApplicationContext();        }        /**获取Context    * @return    */   public static Context getContext(){     return mContext;   }         @OverrIDe   public voID onLowMemory() {     superonLowMemory();   }       } 

我们需要在AndroIDMainifest.xml把MainApplication注册进去(第10行代码):

<?xml version="1.0" enCoding="utf-8"?> <manifest xmlns:androID="http://schemasandroIDcom/apk/res/androID"   package="comtutorapplication"   androID:versionCode="1"   androID:versionname="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="androIDintentactionMAIN" />         <category androID:name="androIDintentcategoryLAUNCHER" />       </intent-filter>     </activity>   </application>    </manifest> 

为了让大家更容易理解,写了一个简单的Demo.步骤如下:

第一步:新建一个AndroID工程ApplicationDemo,目录结构如下:


第二步:新建MainApplication.Java,代码和上面一样我就不贴了.

第三步:新建一个工具类ToolsUtil.java,代码如下

package com.tutor.application; import androIDcontentContext; import androIDWidgetToast;  /**  * @author frankIEwei  * 应用的一些工具类  */ public class ToolUtils {      /**    * 参数带Context    * @param context    * @param msg    */   public static voID showToast(Context context,String msg){     ToastmakeText(context,msg,ToastLENGTH_SHORT)show();   }      /**    * 调用全局的Context    * @param msg    */   public static voID showToast(String msg){     ToastmakeText(MainApplicationgetContext(),ToastLENGTH_SHORT)show();   } } 

第四步:新建一个VIEw命名为MainVIEw.java就是我们Activity现实的VIEw.代码如下:

package com.tutor.application;  import androIDappActivity; import androIDcontentContext; import androIDutilAttributeSet; import androIDvIEwLayoutInflater; import androIDvIEwVIEw; import androIDWidgetbutton; import androIDWidgetFrameLayout;  /**  * @author frankIEwei  * 自定义的MainVIEw  */ public class MainVIEw extends FrameLayout implements VIEwOnClickListener{      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 = LayoutInflaterfrom(mContext);     VIEw v = inflaterinflate(Rlayoutmain,null);     addVIEw(v);          mArgbutton = (button)vfindVIEwByID(RIDarg_button);     mGloblebutton = (button)vfindVIEwByID(RIDglo_button);     mExitbutton = (button)vfindVIEwByID(RIDexit_button);          mArgbuttonsetonClickListener(this);     mGloblebuttonsetonClickListener(this);     mExitbuttonsetonClickListener(this);   }    public voID onClick(VIEw v) {     if(v == mArgbutton){       ToolUtilsshowToast(mContext,"我是通过传递Context参数显示的!");     }else if(v == mGloblebutton){       ToolUtilsshowToast("我是通过全局Context显示的!");     }else{       mActivityfinish();     }   }  } 

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

<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemasandroIDcom/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 androIDappActivity; import androIDosBundle;  public class ApplicationDemoActivity extends Activity {   @OverrIDe   public voID onCreate(Bundle savedInstanceState) {     superonCreate(savedInstanceState);          MainVIEw mMainVIEw = new MainVIEw(this);     setContentVIEw(mMainVIEw);      }    } 

第六步:运行上述工程效果如下:


运行效果1                            


运行效果2---- 点击第一个按钮 


运行效果3---- 点击第二个按钮

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的谈谈Android里的Context的使用实例全部内容,希望文章能够帮你解决谈谈Android里的Context的使用实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存