#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 ), но между свойствами тега и текста вы должны быть в состоянии найти что-то стоящее для передачи, что идентифицирует вкладку с действием.