【发布时间】:2017-03-12 18:56:02
【问题描述】:
我在将带有选项卡的 ViewPager 页面呈现到 ActionBar 时遇到了一些问题。
示例:
Android 信息:最低 API 19,编译 API 21(使用 AppCompat)
主布局(main.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.MainFragment">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
主片段:
public class MainFragment extends Fragment {
private ViewPager viewPager;
private PagerTabsAdapter mAdapter;
private ActionBar actionBar;
private String[] tabs;
private int startIn;
MainActivity main;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
main = (LessonsScheduler) getArguments().get("instance");
tabs = new String[]{"1","2","3"};
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.main, container, false);
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(!main.getSupportActionBar().isShowing())
main.getSupportActionBar().show();
viewPager = (ViewPager) main.findViewById(R.id.pager);
actionBar = main.getSupportActionBar();
// Getting item array
mAdapter = new PagerTabsAdapter(getChildFragmentManager(), main.getGroups());
viewPager.setAdapter(mAdapter);
actionBar = main.getSupportActionBar();
//Enable Tabs on Action Bar
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener(){
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
};
if (actionBar.getTabCount() == 0) {
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab()
.setText(tab_name)
.setTabListener(tabListener));
}
}
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
}
当我单击选项卡按钮时,我的 viewpager 不会改变。我已经测试过 invalidate()、requestLayout()、forceLayout(),但是这些都不起作用。
要测试的代码行:
viewPager.setCurrentItem(tab.getPosition());
【问题讨论】:
-
只是好奇,你为什么不用
tabLayout? -
因为似乎
TabLayout只能用于API 22+ -
不。没有这样的事情。看看这个教程..guides.codepath.com/android/…
标签: java android android-fragments android-viewpager fragment