Как вызвать методы для отдельных действий, добавленных в TabActivity? - PullRequest
0 голосов
/ 19 августа 2011

Я создал TabActivity, в котором есть две вкладки, каждая из которых отображает отдельные действия. Я не могу вызвать метод onConfigurationChanged, определенный в обоих этих действиях, когда пользователь меняет вкладки. Вот код:

public class MyTabActivity extends TabActivity  implements OnTabChangeListener {

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab_page);

    Resources res = getResources(); 
    TabHost tabHost = getTabHost(); 
    TabHost.TabSpec spec = null;
    Intent intent = null;

    tabHost.setOnTabChangedListener(this);


// ACTIVITY 1
    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, Activity1.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("act1").setIndicator("ACT1",
                      res.getDrawable(R.drawable.tab_home))
                  .setContent(intent);
    tabHost.addTab(spec);

// ACTIVITY 2
    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, Activity2.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("act2").setIndicator("ACT2",
                      res.getDrawable(R.drawable.tab_home))
                  .setContent(intent);
    tabHost.addTab(spec);
}


    @Override
    public void onTabChanged(String arg0) {
        Log.d("DGTabActivity", "tab changed");

        if (tabHost.getCurrentTab() == 0) {
            // How to call method on Act1??
                       callOnConfigurationChanged("com.tab.Activity1");   // doesn't work
        }
        else if (tabHost.getCurrentTab() == 1) {
            // How to call method on Act2??
        }
    }

Я также пытался использовать следующий код для вызова метода onConfigurationChanged внутри метода onTabChanged, но он выдает исключение:

private void callOnConfigurationChanged (String className) {
    try{
      //onConfigurationChanged
      //Class amnClass = Class.forName("android.app.ActivityManagerNative");    

      Class amnClass = Class.forName(className); 
      Object amn = null; 
      Configuration config = null; 
      Resources res = null;


      // res = amn.getResources(); 
      Method methodGetConfiguration = amnClass.getMethod("getResources"); 
      methodGetConfiguration.setAccessible(true); 
      res = (Resources) methodGetConfiguration.invoke(amn); 

      config = res.getConfiguration();

      // amn.onConfigurationChanged(config);
      Method methodOnConfigurationChanged = amnClass.getMethod("onConfigurationChanged"); 
      methodOnConfigurationChanged.setAccessible(true); 
      methodOnConfigurationChanged.invoke(amn, config); 

    }
    catch (Exception e) {
        Log.d("Tab host Exception" , e.toString());
    }

}

Спасибо за ваше время.

веселит Ani

1 Ответ

0 голосов
/ 19 августа 2011

Вы можете использовать намеренные фильтры.Трансляция события с измененной конфигурацией в активности ваших вкладок и добавление слушателей к действиям в ваших вкладках.

...