有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ViewPager选项卡处理

我在将带有选项卡的ViewPager页面呈现到ActionBar时遇到一些问题
示例:
Example image

Android信息:最低API 19,编译API 21(使用AppCompat)

主布局(Main.xml):

<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    tools:context=".fragments.MainFragment">

    <安卓.support.v4.view.ViewPager
        安卓:id="@+id/pager"
        安卓:layout_width="match_parent"
        安卓: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());

共 (1) 个答案

  1. # 1 楼答案

    目前我正在使用表格布局(谢谢@Wizard)。它似乎适用于旧的API

    我仍然对新想法持开放态度