Bundle、View和Context分别是什么意思?

4

大家好,我在Youtube上看了一个有关Android的教程,共有200个视频,但没有解释Bundle、View和Context是什么。

第一个问题 Bundle是什么?

第二个问题 onCreate方法中的bundle是什么,它来自哪里?bundle中包含了什么?

第三个问题 Context是什么?我发现Activity扩展了Context,那么是不是说Context就是该活动本身?还是该活动的上下文环境?

第四个问题 View是什么?我发现TextView扩展了View,其他小部件如Button EditText扩展了TextView,这意味着它们也扩展了View。我还发现Button、EditText和其他小部件的语法是这样的...

TextView(Context);
Button(Context);
EditText(Context);

我的假设是,“上下文=活动=屏幕”,“视图=按钮=文本视图=编辑框”。因此,在这个例子中,……
public Example extends Activity{

    onCreate(){
        Button buttonObj = new Button(this):
    }
}

Button buttonObj = new Button(this);这里的"this关键字"指的是扩展Activity的Example类。这段代码是否基本上意味着"将此视图(即按钮)放入屏幕中的活动上下文中"?如果我是正确的,那么为什么要在Button中传递Activity?因为如果将button传递到Activity中,则会更有意义。

第五个问题这里发生了什么?

add.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub

        //code here

    }
});

什么是新的 View.onclickListener()?这是一个静态方法,它返回一个实现了 onClickListener 接口的对象吗?

您能否推荐一些学习 Android 的好书?


从 http://developer.android.com/reference/android/app/Activity.html 开始: - Tarun
我可以下载那个文档吗? - user1394479
好书推荐:《Pro Android 4》和《Busy Coder's Guide to Android Developmnent》。关于“什么是View”,“什么是Context”等问题在实践中用处不大(尽管这是我的个人观点)。 - Alexander Kulyakhtin
学习Android应用程序的第一步。http://developer.android.com/design/index.html - Tarun
3个回答

3

Bundle(捆绑包) ~ 捆绑包是数据的集合。当一个Activity启动(通过onCreate),Android操作系统或您可以通过这个捆绑包向该活动传递一些额外的数据。你知道HashMap是什么吗?捆绑包是一个比哈希映射更加高级的哈希映射,因为它支持多种不同类型。

OnCreate Bundle(创建捆绑包) ~ 这个捆绑包来自Android。老实说,不要太担心它。如果你想从另一个活动开始一个活动,你会使用一个意向(你已经知道了吗?)。因此,你可以将数据“捆绑”到意向中(使用setExtra方法)。这个意向中的数据将包含在这个onCreate捆绑包中,并且你可以通过它来访问它。

Context(上下文) ~ 你的运行应用程序及其相关内容。当你运行你的应用程序时,与你的应用程序相关的所有内容都由这个上下文引用。你所有的活动、视图、资源,所有东西都与上下文相关。把它看作是单词定义的:它是你应用程序的上下文。每个应用程序都有一个唯一的上下文。

View(视图) ~ 任何可以在屏幕上绘制的东西都是视图。


是的,我知道如何通过意图传递捆绑包,我只是好奇在onCreate()中传递的捆绑包。为什么上下文被传递到视图内而不是视图内部的上下文? - user1394479
在onCreate中的bundle包含了来自你的intent的数据。一个视图本身并没有参照它存在的位置。它只是“可以被绘制的东西”。因此,你必须将任何新视图与你的应用程序的唯一上下文相关联。 - edthethird
所以Button buttonObj = new Button(this);将视图与上下文相关联?不将上下文放入视图中? - user1394479
1
通过 new Button(this) ,你为 Button 提供了对 Context 的引用。这将创建一个视图到上下文的关联。这将允许视图知道它属于哪个上下文。 - edthethird

1

OnCreate(): 一个活动的整个生命周期发生在第一次调用onCreate()到最后一次调用onDestroy()之间。一个活动在onCreate()中完成所有“全局”状态的初始设置,并在onDestroy()中释放所有剩余资源。例如,如果它有一个在后台运行以从网络下载数据的线程,它可以在onCreate()中创建该线程,然后在onDestroy()中停止该线程。 当活动首次创建时,将调用OnCreate方法。这是您应该进行所有正常静态设置的地方-创建视图,将数据绑定到列表等。如果已捕获该状态,则会向此方法传递包含活动先前状态的Bundle对象。

视图: 窗口的可视内容由一系列视图提供,这些视图是从基本View类派生出来的对象。 每个视图控制窗口内的特定矩形空间。父视图包含并组织其子视图的布局。叶子视图(在层次结构底部的视图)在它们控制的矩形中绘制并响应用户针对该空间的操作。因此,视图是活动与用户交互发生的地方。 例如,一个视图可能显示一个小图像,并在用户点击该图像时启动一个操作。Android有许多现成的视图(小部件),您可以使用,包括按钮、文本字段、滚动条、菜单项、复选框等等。


那个传递到onCreate()中的bundle是从哪里来的? - user1394479
如果活动在之前被关闭后重新初始化,则此Bundle包含它最近在onSaveInstanceState(Bundle)中提供的数据。请访问此链接,您将得到所有答案。onCreate (Bundle savedInstanceState) - Tarun

1
我建议您查看一些基于文本的教程,而不是视频,因为当您感到困惑时,这样更容易查看和重新阅读。
我会开始帮助您弄清楚这些术语的含义。
Bundle - 对您理解来说并不是非常重要。当调用一个活动时,您可以向bundle中添加内容,以便将信息发送到下一个活动,以便新活动具有您想要的信息。
Context - 每个活动都有自己的上下文,了解它的基本概念很重要。您的第一个应用程序将只有一个活动(或类),从中完成所有操作。在这种情况下,您只需要关注“this”上下文,这意味着当前活动处于活动状态。但是,如果您使用具有多个活动的应用程序,则某些活动可能处于活动状态,而其他活动则不是。上下文告诉您的应用程序请求哪个活动执行操作,例如在屏幕上显示文本或图像。
视图是您的基本UI元素。它们可以是简单的TextViews(仅显示文本)、按钮或更复杂的布局,用于组织其他视图。
对于您的示例:
public Example extends Activity{
     onCreate(){
          Button buttonObj = new Button(this):
          }

示例是使用Activity资源的类名。当启动“示例”活动时,它首先调用onCreate方法。然后创建一个按钮对象,您可以将其“附加”到布局文件中找到的物理按钮上。

setOnClickListener方法用于准备您的活动以进行按钮单击。放入onClick部分的代码是用户单击按钮时会发生的事情。

如果您想进入Android编程,您应该首先阅读本网站上的FAQ。您只应发布可回答的问题,而不是询问意见,例如哪本书好。已经有数百人提出了这个问题,如果您无法进行简单的谷歌搜索,您可能需要等待学习编程。

但我很好,所以这里有一些在线教程,可以让您开始并解释您困惑的一些事情:

http://developer.android.com/guide/index.html http://www.codeproject.com/Articles/102065/Android-A-beginner-s-guide


我知道setOnClickListener是做什么的。请看一下我的关于setOncClickListener的问题。 - user1394479
在那段代码中,它正在为名为“add”的按钮设置 onClickListener。但实际上什么也没有发生,因为 onClick 部分中没有代码。 - willmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接