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