Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:上下文对象_Android_Android Context - Fatal编程技术网

Android:上下文对象

Android:上下文对象,android,android-context,Android,Android Context,在Android上编程时,我们到处都使用上下文对象(可能是context关键字或this关键字),但我真的不明白它的用途 例如,当我们添加UI组件时,例如TextView: TextView textView = new TextView(this); //this simple line make me headache setContentView(textView); 我第一次想到上面这行是:这个关键字的意思是:这个文本视图将被分配到当前屏幕。但在那之后,我发现这是一个错误的想法,因为

在Android上编程时,我们到处都使用上下文对象(可能是
context
关键字或
this
关键字),但我真的不明白它的用途

例如,当我们添加
UI组件时,例如
TextView

TextView textView = new TextView(this);  //this simple line make me headache
setContentView(textView);
我第一次想到上面这行是:
这个
关键字的意思是:这个文本视图将被分配到当前屏幕。但在那之后,我发现这是一个错误的想法,因为line
setContentView(textView)
按照我的想法去做

那么,谁能为我解释一下,在上面的示例中,当我们声明
上下文对象时是出于什么目的。(和其他情况,如果你愿意,请告诉我更多:D)


谢谢:)

一个
上下文
对象提供对应用程序资源和其他功能的访问。每个
活动
都是一个
上下文
,每个
视图
都需要一个
上下文
,这样它就可以检索它需要的任何资源(包括系统定义的资源)


第二行告诉
活动
对象使用特定的
视图
(一个
文本视图
)作为该
活动
显示的顶级用户界面元素。这与首先将
活动
用作构建
文本视图的
上下文
之间没有冲突。它们是不同的东西。

在活动中动态创建视图时,您将需要
上下文。例如,您可能希望从代码动态创建
TextView
。为此,需要实例化
TextView
类。
TextView
类的构造函数接受一个
Context
对象,因为
Activity
类是
Context
的子类,所以可以使用
this
关键字来表示
Context
对象。

为什么它需要一个上下文?表示每个视图都需要上下文来访问正确的资源(例如主题、字符串等)

但为什么在构造函数中而不是通过

  • 因为在构造视图时必须可以访问资源(构造函数需要一些资源来完全初始化视图)

  • 这允许灵活地使用与当前活动不同的上下文(想象一个视图使用一些其他字符串资源,而不是当前活动中的字符串资源)

  • Android SDK的设计者似乎选择了只需设置一次上下文,然后在视图的整个生命周期内保持不变

  • 为什么上下文不能在构造点自动确定

  • 因为不存在可以告诉您应用程序当前全局上下文的静态变量。该方法最接近于此,但它不是静态的,因此需要
    活动
    对象的实例来调用它

  • Java语言提供了一个选项,可以查看调用堆栈并查找
    视图
    是否已在
    上下文
    类中构造。但是如果有很多呢?或者如果没有呢?这种方法非常昂贵,而且容易出错。因此,API的设计者决定必须手动提供上下文


  • 对不起,我有一个问题:正如您所说,
    视图
    需要一个
    上下文
    来使用资源(例如,系统资源)。那么,为什么它们不自动执行呢?@hqt-框架创建
    上下文
    对象,并在构建后调用
    onCreate()
    方法之前将其传递给
    活动
    。(这是通过调用从其父类继承的
    attachBaseContext()
    方法来实现的,
    ContextThemeWrapper
    )由于框架(通常)控制
    活动
    对象的创建,因此它可以自动进行此调用。对于
    视图
    对象,情况并非如此,因为它们的创建由您控制。(请注意,它或多或少是由
    视图
    对象通过XML膨胀自动处理的。)很好的解释。谢谢。和我问Ted Hopp的问题一样,你能告诉我为什么android不自动设计吗?谢谢:)问得好。我也是这么想的。这很好地解释了为什么我们在动态创建文本视图时需要上下文。但是,在动态创建文本视图数组时,我们不必提及任何上下文。为什么会这样?TextView[]TextView=新建TextView[10];