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

tbl*_*tbl 5 tabs android message android-intent android-activity

我对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);
    }
}
Run Code Online (Sandbox Code Playgroud)

_

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

HelloAndroidActivity是主要活动.Tab1Activity是子活动并显示listview.HelloAndroidActivity包含Tab1Activity视图.

我想要做的是从HelloAndroidActivity调用addColumn方法,因为HelloAndroidActivity被添加到像TwitterUserStreamAdapter这样的新函数中.如果android从Internet接收消息,应用程序会向Tab1Activity发送消息.

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

Can*_*ner 5

您可以在使用的活动之间传递数据intent,您可以将其放在具有意图的附加内容中:

HelloAndroidActivity

intent.putExtra("callX", true);
Run Code Online (Sandbox Code Playgroud)

Tab1Activity

Bundle extras = getIntent().getExtras();
if (extras != null) {
    boolean callX = extras.getBoolean("callX");
    if(callX) {
       X();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑 如果你需要事件/监听器机制它可能大致是这样的(没有编译这个,但应该给你一个想法):

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)