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

时间:2011-11-28 12:22:42

标签: android android-activity tabs android-intent message

我对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发送消息。

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

2 个答案:

答案 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()来反映选项卡之间的更改。