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