我对Android实施计划活动之间的沟通有疑问。
这是两个活动类。
public class HelloAndroidActivity extends TabActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, Tab1Activity.class);
spec = tabHost.newTabSpec("Tab1").setIndicator(
"Tab1", res.getDrawable(R.drawable.ic_tab_icon))
.setContent(intent);
tabHost.addTab(spec);
}
}
_
public class Tab1Activity extends ListActivity {
private ArrayList<String> list = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
list = new ArrayList<String>();
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list));
addColumn("one");
addColumn("two");
addColumn("three");
}
public void addColumn(String s){
list.add(new String(s));
}
}
HelloAndroidActivity是主要活动。 Tab1Activity是子活动并显示listview。 HelloAndroidActivity包括Tab1Activity视图。
我想要做的是从HelloAndroidActivity调用addColumn方法, 因为HelloAndroidActivity被添加到像TwitterUserStreamAdapter这样的新函数中。 如果android从互联网接收消息, 应用程序向Tab1Activity发送消息。
但是,我不知道如何实现活动之间的沟通。
答案 0 :(得分:5)
您可以使用intent
在活动之间传递数据,您可以将其添加到具有意图的附加内容中:
HelloAndroidActivity
intent.putExtra("callX", true);
Tab1Activity
Bundle extras = getIntent().getExtras();
if (extras != null) {
boolean callX = extras.getBoolean("callX");
if(callX) {
X();
}
}
修改强> 如果你需要事件/监听器机制,它可能大致是这样的(没有编译这个,但应该给你一个想法):
public inerface MyEventListener {
abstract void handleMyEvent();
}
public class Tab1Activity implements MyEventListener {
public void handleMyEvent() {
/*...*/
}
protected void onCreate(Bundle savedInstanceState) {
/*...*/
HelloAndroidActivity.addListener(this);
}
protected void onDestroy() {
/*...*/
HelloAndroidActivity.removeListener(this);
}
}
public class HelloAndroidActivity {
static ArrayList<MyEventListener> listeners = new ArrayList<MyEventListener>();
public static void addListener(MyEventListener listener) {
listeners.add(listener);
}
public static void removeListener(MyEventListener listener) {
listeners.remove(m);
}
public static void onEvent() {
for(MyEventListener m : listeners) {
m.handleMyEvent();
}
}
}
答案 1 :(得分:0)
虽然你可以通过创建静态方法来实现,但不是正确的方法,因为它会留下上下文。将数据传递给HelloAndroidActivity throgh intent中的Tab1Activity。 在Tab1Activity里面getIntent并相应地工作。
您还可以使用onTabChange()来反映选项卡之间的更改。