大家好,今天给大家分享一下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的使用实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)