返回按钮和ViewPager

4

我是使用android.support.design.widget.TabLayout来配合viewPager的。我的xml代码如下:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v4.view.ViewPager
            android:id="@+id/home_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="@dimen/custom_tab_layout_height"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <!-- tabs -->
        <android.support.design.widget.TabLayout
            android:id="@+id/home_tabs"
            android:layout_width="match_parent"
            android:layout_height="@dimen/custom_tab_layout_height"
            android:layout_alignParentBottom="true"
            app:tabGravity="fill"
            android:background="@color/light_blue_low_opacity"
            app:tabIndicatorHeight="0dp"
            app:tabMode="fixed"
            app:tabPaddingEnd="0dp"
            app:tabPaddingStart="0dp"
            app:tabSelectedTextColor="@color/light_green"
            app:tabTextAppearance="@style/HomeTabsTextAppearance"
            app:tabTextColor="@color/white" />

    </RelativeLayout>

我将ViewPager设置如下:
 mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.home_container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setPagingEnabled(false);
        mViewPager.setOffscreenPageLimit(5);

        tabLayout = (TabLayout) findViewById(R.id.home_tabs);
        tabLayout.setTabTextColors(ContextCompat.getColorStateList(this, R.color.color_home_tabs));
        tabLayout.setupWithViewPager(mViewPager);

我的Tab监听器是

 tabLayout.setOnTabSelectedListener(
                new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
                    @Override
                    public void onTabSelected(TabLayout.Tab tab) {
                        super.onTabSelected(tab);
                        int position = tab.getPosition();
                    mViewPager.setCurrentItem(position);

                    String tab0TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab1) + " </font>";
                    String tab1TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab2) + "</font>";
                    String tab2TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab3) + "</font>";
                    String tab3TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab4) + "</font>";
                    String tab4TextUnSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.white) + "'> " + getResources().getString(R.string.home_tab5) + "</font>";


                    String tab0TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab1) + " </font>";
                    String tab1TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab2) + "</font>";
                    String tab2TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab3) + "</font>";
                    String tab3TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab4) + "</font>";
                    String tab4TextSelected = "<font color='" + ContextCompat.getColor(getApplicationContext(), R.color.light_green) + "'> " + getResources().getString(R.string.home_tab5) + "</font>";

                    TabLayout.Tab tab0 = tabLayout.getTabAt(0);
                    TabLayout.Tab tab1 = tabLayout.getTabAt(1);
                    TabLayout.Tab tab2 = tabLayout.getTabAt(2);
                    TabLayout.Tab tab3 = tabLayout.getTabAt(3);
                    TabLayout.Tab tab4 = tabLayout.getTabAt(4);


                    if (tab0 != null) {
                        tab0.setIcon(R.drawable.ic_home_profile_unselected);
                        tab0.setText(Html.fromHtml(tab0TextUnSelected));
                    }

                    if (tab1 != null) {
                        tab1.setIcon(R.drawable.ic_home_rewards_unselected);
                        tab1.setText(Html.fromHtml(tab1TextUnSelected));
                    }

                    if (tab2 != null) {
                        tab2.setIcon(R.drawable.ic_home_gallups_unselected);
                        tab2.setText(Html.fromHtml(tab2TextUnSelected));
                    }

                    if (tab3 != null) {
                        tab3.setIcon(R.drawable.ic_home_statistics_unselected);
                        tab3.setText(Html.fromHtml(tab3TextUnSelected));
                    }

                    if (tab4 != null) {
                        tab4.setIcon(R.drawable.ic_home_settings_unselected);
                        tab4.setText(Html.fromHtml(tab4TextUnSelected));
                    }

                    if (position == 0) {
                        if (tab0 != null) {
                            tab0.setIcon(R.drawable.ic_home_profile_selected);
                            tab0.setText(Html.fromHtml(tab0TextSelected));
                        }
                    } else if (position == 1) {
                        if (tab1 != null) {
                            tab1.setIcon(R.drawable.ic_home_rewards_selected);
                            tab1.setText(Html.fromHtml(tab1TextSelected));
                        }
                    } else if (position == 2) {
                        if (tab2 != null) {
                            tab2.setIcon(R.drawable.ic_home_gallups_selected);
                            tab2.setText(Html.fromHtml(tab2TextSelected));
                        }
                    } else if (position == 3) {
                        if (tab3 != null) {
                            tab3.setIcon(R.drawable.ic_home_statistics_selected);
                            tab3.setText(Html.fromHtml(tab3TextSelected));
                        }
                    } else if (position == 4) {
                        if (tab4 != null) {
                            tab4.setIcon(R.drawable.ic_home_settings_selected);
                            tab4.setText(Html.fromHtml(tab4TextSelected));
                        }
                    }

                }


            });

我已经重写了onBackPressed方法,如下所示:

 if (mViewPager.getCurrentItem() != 0) {
     mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, true);
}

总之,我有带有图标和文本的选项卡。 当选择选项卡时,图标会更改并且文本变为绿色。 当未选择选项卡时,图标会更改并且文本变为白色。 当用户单击选项卡时,这很有效。 当用户单击返回按钮时,图标和文本颜色正确更改,但对于以前的选项卡,文本仍保持在绿色。
4个回答

16

试一下这个,

@Override
    public void onBackPressed() {

        if (viewPager.getCurrentItem() != 0) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() - 1,false);
        }else{
             finish();
        }

    }

但不要调用 super.onBackPressed() 方法。


第二个参数是用于平滑滚动的...不管怎样,我测试了一下,哇塞,它起作用了。 - user4292106
@Pradeep Gupta,你能解释一下原因吗? - user4292106
1
如果你禁用平滑滚动(第二个参数),那么它将直接跳转到你想要的页面,没有滚动效果(也不会在路上“切换”到其他页面),如果你启用平滑滚动,那么它将通过所有视图,这样你就可以看到它不是下一个而是第一个。 - Pradeep Gupta

3

覆盖您ActivityonBackPressed()方法,使用以下代码:

@Override
public void onBackPressed() {
    int currentItem = viewPager.getCurrentItem();
    if (currentItem != 0) {
        viewPager.setCurrentItem(currentItem - 1, true);
    } else {
        super.onBackPressed();
    }
}

1

我不确定我是否正确理解了你的问题,但是尝试调用

super.onBackPressed();

在你的 if 语句之后。

如果我使用super.onBackPressed(),它会关闭我的活动。 - user4292106

0
您的ViewPager需要一个OnPageChangeListener来更改所选的选项卡。
    mViewPager.setOnPageChangeListener(
        new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                // When swiping between pages, select the
                // corresponding tab.
                getActionBar().setSelectedNavigationItem(position);
            }
        });
...

setOnPageChangeListener已被弃用。 - user4292106
还有我的应用程序崩溃了。 - user4292106
2
请使用addOnPageChangeListener代替。 - Eric Liu
我已经使用addOnPageChangeListener并覆盖了onTabSelected和onTabUnselected,但是没有起作用。 - user4292106

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接