我的背景是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?
答案 0 :(得分:0)
实际上他们不需要Activity
但是Context
(Activity
是一个派生自它的类,因此它是传递给{{1 s'构造函数)。 Android中的View
类似于上帝对象,通过它可以访问资源,应用程序状态,设备资源等。
您提到的所有类都是Context
的 sons ,其构造函数需要View
(然后是派生类'构造函数)。 doc说明了这个参数: 上下文 :运行视图的上下文,通过它可以访问当前主题,资源,等
答案 1 :(得分:0)
Context提供对应用程序状态信息的访问。它提供对资源文件,图像,主题/样式和外部目录位置的活动,片段和服务访问。它还可以访问Android的内置服务,例如用于布局通胀,键盘和查找内容提供商的服务。
在许多情况下,当需要"上下文"时,我们只需要传入当前活动的实例。在我们处于由活动(例如适配器或片段)创建的对象内部的情况下,我们需要将活动实例传递到这些对象中。在我们不在活动中(在应用程序或服务中)的情况下,我们可以使用"应用程序"上下文。
有关详细信息,请查看此owesome tutorial。
至于你的问题Button和TextView以及android扩展中的任何其他小部件View和view需要上下文从默认主题等资源中获取一些值。查看View source code并搜索mContext。