Взаимодействие с панелью действий при использовании отражения

#android #reflection #android-actionbar

#Android #отражение #android-панель действий

Вопрос:

Чтобы сохранить обратную совместимость, я создал класс для доступа к панели действий:

импортируйте android.app.ActionBar; импортируйте android.app.ActionBar.Вкладка; импортировать android.app.ActionBar.TabListener; импортировать android.app.FragmentTransaction;

 public class ReflectionBar{

    static void getActionBar(Activity a) {

        ActionBar bar = a.getActionBar();

        bar.addTab(bar.newTab().setText("Tab 1").setTabListener(new TabListener() {

                @Override
                public void onTabReselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onTabSelected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                    // TODO Auto-generated method stub

                }
            }));


    bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayShowHomeEnabled(true);
    // remove the activity title to make space for tabs
    bar.setDisplayShowTitleEnabled(false);

    return;
    }

}
  

И я вызываю это в своем классе Activity, используя:

 if (android.os.Build.VERSION.SDK_INT>10){
    ReflectionBar bar = new ReflectionBar();
    bar.getActionBar(this);
}
  

Проблема в том, что мне нужно прослушивать вызовы onTabSelected в моей основной деятельности, но я не уверен, как это настроить. Я безуспешно пробовал несколько разных вещей, любая помощь очень ценится.

Ответ №1:

Проблема в том, что мне нужно прослушивать вызовы onTabSelected в моей основной деятельности, но я не уверен, как это настроить. Я безуспешно пробовал несколько разных вещей, любая помощь очень ценится.

Определите интерфейс. Передайте экземпляр интерфейса в getActionBar() как final параметр (который действительно должен быть назван initActionBar() , поскольку вы не возвращаете панель действий, но это только я …). В различных onTab... методах ваших TabListener объектов вызывайте соответствующий метод в вашем интерфейсе. Вы не сможете передать ActionBar.Tab объект в интерфейс (поскольку это уровень API 11 ), но между свойствами тега и текста вы должны быть в состоянии найти что-то стоящее для передачи, что идентифицирует вкладку с действием.