Как вызвать метод в другой деятельности - PullRequest
5 голосов
/ 28 ноября 2011

У меня есть вопрос о связи между действиями по реализации программы 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.

То, что я хочу сделать, это вызвать метод addColumn из HelloAndroidActivity, потому что HelloAndroidActivity добавляется в новую функцию, такую ​​как TwitterUserStreamAdapter. Если андроид получает сообщения из интернета, приложение отправляет сообщение в Tab1Activity.

Однако я не знаю, как реализовать связь между действиями.

Ответы [ 2 ]

5 голосов
/ 28 ноября 2011

Вы можете передавать данные между действиями, используя intent, вы можете поместить их в статисты с намерением:

HelloAndroidActivity

intent.putExtra("callX", true);

Tab1Activity

Bundle extras = getIntent().getExtras();
if (extras != null) {
    boolean callX = extras.getBoolean("callX");
    if(callX) {
       X();
    }
}

EDIT Если вам нужен механизм событий / слушателей, он может быть примерно таким (не скомпилировал это, но должен дать вам представление):

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();
        }
    }
}
0 голосов
/ 28 ноября 2011

хотя вы можете сделать это, создав статический метод, но не правильным способом, потому что он выйдет из контекста.передать данные в Tab1Activity у вас есть в намерении HelloAndroidActivity через намерение.внутри Tab1Activity getIntent и работают соответственно.

Вы также можете использовать onTabChange () для отражения изменений между вкладками.

...