谈谈Android里的Context的使用实例

这篇文章主要介绍了谈谈Android里的Context的使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

大家好,今天给大家分享一下Android里的Context的一些用法,以前经常有人在群里问我比如我在一个工具类里的某个方法,或者View里需要调用Context.但是工具类还有View里没有这个上下文怎么办?为了解决大家的疑问,为了解决大家的疑问,我今天写一个简单的Demo.让大家如何学好自如的用Context.想什么时候有Context,什么时候就有Context.

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

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

    

这个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行代码):

      

为了让大家更容易理解,写了一个简单的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(), msg, 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代码如下:

   

第五步:修改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---- 点击第二个按钮

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是谈谈Android里的Context的使用实例的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动