为什么android需要在任何小部件的构造函数中传递活动的实例

时间:2017-03-01 16:45:17

标签: java android

我的背景是Java,Swing,JavaFX,这就是为什么我在Android中感到困惑的原因。为什么每个组件(Button,ListView,EditText)或任何其他小部件都需要通过activity's实例。

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags);
Button btnTag = new Button(this); // why need to pass this/activity here?
layout.addView(row); // this is the layout in which we are placing button
                    // then why we need to pass activity's instance as parameter?

2 个答案:

答案 0 :(得分:0)

实际上他们不需要Activity但是ContextActivity是一个派生自它的类,因此它是传递给{{1 s'构造函数)。 Android中的View类似于上帝对象,通过它可以访问资源,应用程序状态,设备资源等。

您提到的所有类都是Context sons ,其构造函数需要View(然后是派生类'构造函数)。 doc说明了这个参数: 上下文 :运行视图的上下文,通过它可以访问当前主题,资源,等

答案 1 :(得分:0)

Context提供对应用程序状态信息的访问。它提供对资源文件,图像,主题/样式和外部目录位置的活动,片段和服务访问。它还可以访问Android的内置服务,例如用于布局通胀,键盘和查找内容提供商的服务。

在许多情况下,当需要"上下文"时,我们只需要传入当前活动的实例。在我们处于由活动(例如适配器或片段)创建的对象内部的情况下,我们需要将活动实例传递到这些对象中。在我们不在活动中(在应用程序或服务中)的情况下,我们可以使用"应用程序"上下文。

有关详细信息,请查看此owesome tutorial

至于你的问题Button和TextView以及android扩展中的任何其他小部件View和view需要上下文从默认主题等资源中获取一些值。查看View source code并搜索mContext。