【问题标题】:Setting action bar title in ViewPager在 ViewPager 中设置操作栏标题
【发布时间】:2015-04-24 12:09:24
【问题描述】:

我的 ViewPager 由许多片段组成。我在 actionBar 中显示片段的标题,我正在使用下面的代码来设置标题。由于 ViewPager 还启动了相邻的片段,我在操作栏中看到了下一个片段的标题。应该是正确的如何在 viewpager 的操作栏中设置标题?

private class MyPagerAdapter extends FragmentPagerAdapter {

    private String[] titles = {
            "Titleme", "Titletos", "Titleos", "Titles", "MeTitle5", "Title6",
            "Title7", "Title8"
    };

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public android.support.v4.app.Fragment getItem(int pos) {
        Bundle args = new Bundle();

        switch (pos) {
            case 0:
                currentFragment = new HomeFragment();
                getSupportActionBar().setTitle("HomeFragment");
                break;
            case 1:
                currentFragment = new HomeFragment5();
                getSupportActionBar().setTitle("HomeFragment5");
                break;
            case 2:
                currentFragment = new HomeFragment4();
                getSupportActionBar().setTitle("HomeFragment4");
                break;
            case 3:
                currentFragment = new HomeFragment3();
                getSupportActionBar().setTitle("HomeFragment3");
                break;
            case 4:
                currentFragment = new HomeFragment4();
                getSupportActionBar().setTitle("HomeFragment4");
                break;
            case 5:
                currentFragment = new ChlHome();
                getSupportActionBar().setTitle("ChlHome");
                break;
            case 6:
                currentFragment = new GiFragment();
                getSupportActionBar().setTitle("GiFragment");
                break;
            case 7:
                currentFragment = new FlList();
                getSupportActionBar().setTitle(" FlList");
                break;
            default:
        }
        return currentFragment;
    }

    @Override
    public int getCount() {
        return 8;
    }       
}

根据shkschneider回答更新

  final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);
    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            pager.setCurrentItem(position);
            switch(position) {
                case 0:

                    getSupportActionBar().setTitle("H");
                    break;
                case 1:
                    getSupportActionBar().setTitle("P");
                    break;
                case 2:
                    getSupportActionBar().setTitle("A");
                    break;
                case 3:
                    getSupportActionBar().setTitle("V");
                    break;
                case 4:
                    getSupportActionBar().setTitle("M");
                    break;
                case 5:
                    getSupportActionBar().setTitle("C");
                    break;
                case 6:
                    getSupportActionBar().setTitle("G");
                    break;
                case 7:
                    getSupportActionBar().setTitle("F");
                    break;
            }

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });


private class MyPagerAdapter extends FragmentPagerAdapter {

        private String[] titles = {
                "Titleme", "Titletos", "Titleos", "Titles", "MeTitle5", "Title6",
                "Title7", "Title8"
        };

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }

        @Override
        public android.support.v4.app.Fragment getItem(int pos) {
            Bundle args = new Bundle();

            switch (pos) {
                case 0:
                    currentFragment = new HomeFragment();

                    break;
                case 1:
                    currentFragment = new HomeFragment5();

                    break;
                case 2:
                    currentFragment = new HomeFragment4();

                    break;
                case 3:
                    currentFragment = new HomeFragment3();

                    break;
                case 4:
                    currentFragment = new HomeFragment4();

                    break;
                case 5:
                    currentFragment = new ChlHome();

                    break;
                case 6:
                    currentFragment = new GiFragment();

                    break;
                case 7:
                    currentFragment = new FlList();

                    break;
                default:
            }
            return currentFragment;
        }

        @Override
        public int getCount() {
            return 8;
        }       
    }
}

【问题讨论】:

    标签: android android-fragments android-actionbar android-viewpager


    【解决方案1】:

    试试这个.....

    final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
                pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
                PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    
                tabs.setViewPager(pager);
    
               //Use tabs for setting listener
                    tabs
                            .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
                                @Override
                                public void onPageSelected(int position) {
                                    // TODO Auto-generated method stub
                                    tabs.setNextFocusRightId(position);
    
                                     actionBar.setTitle(titles[pos]);
                                }
    
                                @Override
                                public void onPageScrolled(int arg0, float arg1, int arg2) {
                                    // TODO Auto-generated method stub
    
                                }
    
                                @Override
                                public void onPageScrollStateChanged(int pos) {
                                    // TODO Auto-generated method stub
    
                                }
                            });
    

    【讨论】:

      【解决方案2】:

      试试这个代码:

      viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
          @Override
          public void onPageSelected(int pos) {
              actionBar.setSelectedNavigationItem(pos);
              actionBar.setTitle(titles[pos]);
          }
      
          @Override
          public void onPageScrolled(int arg0, float arg1, int arg2) {
      
          }
      
          @Override
          public void onPageScrollStateChanged(int arg0) {
      
          }
      });
      

      【讨论】:

      • 这有效..但我没有看到选项卡的选择下划线在选择时被更改。它仅保留在第一个选项卡上......而以前它在页面更改时改变得很好
      • 我正在使用 pagerslidingtabstrip
      • 如何使用 pagerstitlestrip
      • 检查我的新答案,我发布了如何使用 pagertitlestrip 代替 viewpager。
      【解决方案3】:

      您可以制作标题字符串数组,然后在视图寻呼机和 onPageScrolled 内部设置页面侦听器,如下所示:

      public void onPageScrolled(int position, float positionOffset,
      int positionOffsetPixels) {
                  getSupportActionBar().setTitle(titles[position]);
              }
      

      【讨论】:

        【解决方案4】:

        每次您的应用想要呈现Fragment 时都会调用getItem(),因此标题当然会显示下一个。

        你应该使用ViewPager.OnPageChangeListener:

        @Override
        public void onPageSelected(final int position) {
            switch (position) {
                case 0:
                    getSupportActionBar().setTitle("HomeFragment");
                    break ;
                // ...
            }
        }
        

        【讨论】:

        • 这工作..但现在我没有看到选项卡的选择下划线在选择时被更改。它只保留在第一个选项卡上......而以前它在页面更改时改变得很好
        • 嗯,这是另一个问题,需要更多关于您的ViewPager 实现的代码,或者打开另一个问题。
        • 它以前工作正常..只有在我添加 ViewPager.OnPageChangeListener 后它不起作用......
        • 我明白了,但你只暴露了你的MyPagerAdapter 代码。这个问题来自我无法猜测的其他地方。
        • 我正在使用 pagerslidingtabstrip
        【解决方案5】:

        从所有地方删除线

        getSupportActionBar().setTitle("XYZ");
        

        来自您的来源。

        仅从getPageTitle 方法返回标题。

        【讨论】:

          猜你喜欢
          • 2012-12-27
          • 2016-12-17
          • 1970-01-01
          • 1970-01-01
          • 2014-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多