什么是ActionScript 3';Android中的事件广播?

什么是ActionScript 3';Android中的事件广播?,android,events,Android,Events,我在一个Android应用程序中有一个自定义标题栏,目前只有一个简单的TextView。我想知道从任何活动中更新标题的最佳类/方法是什么?例如,我有一个TabActivity,其中有一个标题栏,当其中一个选项卡活动更改时,我需要更改标题。我还想更改不在选项卡上下文中的其他活动中的标题栏 我已经看过了BroadcastReceivers和intent,但我并不真正理解术语,所以我不确定Actionscript的事件广播是什么等价物。我想让我的标题栏类监听接收到字符串的“全局”应用程序事件,并在收到

我在一个Android应用程序中有一个自定义标题栏,目前只有一个简单的
TextView
。我想知道从任何活动中更新标题的最佳类/方法是什么?例如,我有一个
TabActivity
,其中有一个标题栏,当其中一个选项卡活动更改时,我需要更改标题。我还想更改不在选项卡上下文中的其他活动中的标题栏

我已经看过了
BroadcastReceivers
intent
,但我并不真正理解术语,所以我不确定Actionscript的
事件
广播是什么等价物。我想让我的标题栏类监听接收到
字符串的“全局”应用程序事件,并在收到该事件时更新标题。我该怎么做

在另一个例子中,在iOS中,我会使用
NSNotificationCenter
postNotification
触发一个“事件”。然后我将拥有一个视图控制器
addObserver
,并监听该事件并对其作出响应。在Android框架中,这样的事情是如何实现的

例如,我有我的“主要”活动:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- here's my header-->
    <include layout="@layout/header"/>


    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"/>
            <TabWidget
                style="@style/TabWidget"
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </TabHost>

标题include包含我要更改的文本字段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/Header">
    <TextView
        style="@style/HeaderTitle"
        android:text="@string/app_name"/>
</LinearLayout>


因此,基本上,我正在寻找一种方法,将TabHost中的任何活动或包含标题的其他活动的通知传递到标题。

我不太愿意将这称为权威答案,因为我自己还在学习Android开发。因此,这是一个开放的社区wiki。希望这些答案中的一些能引导你去你想去的地方

如果您一直在玩Android事件监听器,您可能会注意到一些类似的代码:

Button newButton = (Button) this.findViewById(R.id.headerbutton);
newButton.setText("click me");
newButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            globalHeader.setText("GOOOOGGGG");

        }
    });
OnClickListener是一个由View实现的接口,它有一个公开的回调函数onClick,这样newButton的内部可以在检测到它被单击时调用它。对象必须将自己传递为侦听器,这与ActionScript不同,ActionScript中的函数是第一类成员。这是Java事件侦听器/分派器关系的一般基础。我从哪里得到globalHeader变量的?像这样:

final TextView globalHeader = (TextView) this.findViewById(R.id.TextView_GlobalHeader);     // TextView_GlobalHeader is just the id I assigned 
//to the header TextView that's used in the import statement.
请注意,它已被宣布为最终版本。这是因为除非包含TextView的变量是final,否则无法将其传递给事件处理程序

因此,我还没有在android SDK中找到全局EventDispatch类型的集线器。我想知道我自己是否存在这样的东西,如果不存在,那么这是为了防止内存泄漏吗?或者可能是因为Java非常严格,所以您几乎无法假设任何给定的侦听器都能做到这一点?我认为在这种情况下,您最好只编写一个非常通用的OnGlobalEvent接口,例如,使用respondToMessage(String pMessage)函数,然后让全局调度中心迭代其所有侦听器,调用respondToMessage(MessageType)


但这里希望有人真正知道他或她在说什么,并告诉我错了。

当你说“全局”应用程序事件时,你指的是事件冒泡,即事件从底部向树结构上移动?或者类似于AS2 ASBroadcaster,只要侦听器有一个与字符串同名的函数,字符串标识符就可以在任何地方调用任何函数?或者可能是两者的混合,其中字符串映射到函数,但不是函数的名称?或者。我只知道标题栏不是加载到TabHost中的那些活动的布局的一部分,所以我不确定如何定位标题栏。看起来我可以通过getParent()访问我的主要活动,但我不想这样耦合这些活动。