【发布时间】:2015-10-09 21:11:50
【问题描述】:
我正在开发一个 Android 4+ 应用程序,该应用程序使用 ActionBar 选项卡来导航 android.support.v4.view.ViewPager。这工作正常,除非在安装后第一次启动应用程序。在这种情况下,选项卡将显示为下拉列表。
这是 MainActivity 的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
style="@style/NavigationDrawerListView" />
<ListView
android:id="@+id/right_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
style="@style/ShortcutsListView" />
</android.support.v4.widget.DrawerLayout>
使用初始化代码 MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
...
// TabBar
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
viewPager = (ViewPager)findViewById(R.id.pager);
viewPager.setAdapter(sectionsPagerAdapter);
currentPageIndex = (savedInstanceState != null ? savedInstanceState.getInt(CURRENT_PAGE_INDEX_KEY, -1) : -1 );
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
getActionBar().setSelectedNavigationItem(position);
updateCurrentPageIndex(position);
}
});
// ActionBar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(Tab tab, android.app.FragmentTransaction arg1) {
viewPager.setCurrentItem(tab.getPosition());
}
public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) { }
public void onTabUnselected(Tab arg0, android.app.FragmentTransaction arg1) { }
};
actionBar.addTab(actionBar.newTab()
.setText(R.string.MainPageTitle)
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(R.string.ContactsPageTitle)
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(R.string.SettingsPageTitle)
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(R.string.MessagePageTitle)
.setTabListener(tabListener));
// http://stackoverflow.com/questions/14672984/
// Set NavigationMode AFTER alle tabs have been added
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
...
}
据我所知,第一次发布确实是这里唯一的区别。但我不知道这如何影响选项卡。
知道如何始终使用标签而不是下拉列表吗?
【问题讨论】:
标签: java android tabs android-actionbar