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

5
我有一个关于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是子活动,显示列表视图。 HelloAndroidActivity包含Tab1Activity视图。

我想要做的是从HelloAndroidActivity调用addColumn方法, 因为HelloAndroidActivity已添加到新功能中,例如TwitterUserStreamAdapter。 如果Android从互联网接收到消息, 应用程序将向Tab1Activity发送消息。

然而,我不知道如何在活动之间实现通信。

2个回答

5
您可以使用 intent 在活动之间传递数据,您可以将其放入意图的额外信息中:

HelloAndroidActivity

intent.putExtra("callX", true);

Tab1Activity
标签一活动 (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();
        }
    }
}

我认为这些代码已经接近我想要做的事情了。 但是当应用程序被执行时,Tab1Activity已经被创建。 那么,我应该在哪里写“Bundle extras ~~ X(); } }”? 例如,是否有侦听器可以通过意图接收消息? 如果存在这样的侦听器,我想将此代码编写在此侦听器的onHoge(?)方法中。 - tbl
不,没有监听器。您可以实现自己的监听器类。请参阅编辑部分。 - Caner

0

虽然您可以通过创建静态方法来实现,但这不是正确的方式,因为它会留下上下文。通过意图将数据传递到HelloAndroidActivity中拥有的Tab1Activity。在Tab1Activity中使用getIntent并相应地处理。

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


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