欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

谈谈Android里的Context的使用实例

程序员文章站 2024-03-01 14:04:40
大家好,今天给大家分享一下android里的context的一些用法,以前经常有人在群里问我比如我在一个工具类里的某个方法,或者view里需要调用context.但是工具类...

大家好,今天给大家分享一下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,目录结构如下:谈谈Android里的Context的使用实例

第二步:新建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代码如下:

<?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); 
   
  } 
   
} 

第六步:运行上述工程效果如下:
谈谈Android里的Context的使用实例
运行效果1                            
谈谈Android里的Context的使用实例
运行效果2---- 点击第一个按钮 
谈谈Android里的Context的使用实例
运行效果3---- 点击第二个按钮

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