Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在另一个活动中调用方法_Android_Android Activity_Tabs_Android Intent_Message - Fatal编程技术网

Android 如何在另一个活动中调用方法

Android 如何在另一个活动中调用方法,android,android-activity,tabs,android-intent,message,Android,Android Activity,Tabs,Android Intent,Message,我有一个关于安卓实施计划活动之间的沟通问题 这里有两个活动课 public class HelloAndroidActivity extends TabActivity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Reso

我有一个关于安卓实施计划活动之间的沟通问题

这里有两个活动课

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);
    }
}
_

公共类Tab1Activity扩展了ListActivity{
private ArrayList list=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
列表=新的ArrayList();
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,list));
添加列(“一”);
添加列(“两列”);
添加列(“三”);
}
公共void addColumn(字符串s){
列表。添加(新字符串);
}
}
黑色素活性是主要活性。 Tab1Activity是子活动,显示列表视图。 HelloAndroidActivity包含Tab1Activity视图

我要做的是从HelloAndroidActivity调用addColumn方法, 因为HelloAndroidActivity被添加到新函数中,比如TwitterUserStreamAdapter。 如果安卓系统接收到来自互联网的消息, 应用程序向Tab1Activity发送消息


但是,我不知道如何实现活动之间的通信。

您可以使用
intent
在活动之间传递数据,您可以将其放在附加文件中,意图如下:

黑色素瘤活性

intent.putExtra("callX", true);
Bundle extras = getIntent().getExtras();
if (extras != null) {
    boolean callX = extras.getBoolean("callX");
    if(callX) {
       X();
    }
}
选项卡1活动

intent.putExtra("callX", true);
Bundle extras = getIntent().getExtras();
if (extras != null) {
    boolean callX = extras.getBoolean("callX");
    if(callX) {
       X();
    }
}
编辑 如果您需要使用事件/侦听器机制,它可能大致如下所示(尚未编译此文件,但应该会让您有所了解):

public inerface MyEventListener{
抽象无效handleMyEvent();
}
公共类Tab1Activity实现MyEventListener{
公共无效handleMyEvent(){
/*...*/
}
创建时受保护的void(Bundle savedInstanceState){
/*...*/
HelloAndroidActivity.addListener(this);
}
受保护的空onDestroy(){
/*...*/
HelloAndroidActivity.removeListener(此);
}
}
公共类HelloAndroid活动{
静态ArrayList侦听器=新建ArrayList();
公共静态void addListener(MyEventListener侦听器){
添加(侦听器);
}
公共静态void removeListener(MyEventListener侦听器){
删除(m);
}
公共静态void onEvent(){
for(MyEventListener m:侦听器){
m、 handleMyEvent();
}
}
}

虽然您可以通过创建静态方法来实现,但这不是正确的方法,因为它将离开上下文。通过intent将数据传递给您在Hello中的Tab1Activity和RoidActivity。 内部选项卡1活动获取意图并相应地工作


还可以使用onTabChange()反映选项卡之间的更改

我认为这些代码与我想做的很接近。但在执行应用程序时,已经创建了Tab1Activity。那么,我应该在哪里写“Bundle extras~~X();}}”?例如,是否有侦听器通过意图接收消息?如果存在这样一个监听器,我想用这个监听器的onHoge(?)方法编写这个代码。您可以实现自己的侦听器类。参见编辑