1

我正在使用http://viewpagerindicator.com/库。我想TitlePageIndicator在 Gmail 应用上创建如下图所示:

在此处输入图像描述

我完全想实现相同的效果,其中第一个标题是“较新”,最后一个标题是“较旧”,中心标题是“[总页数]的[页面位置]”。是否可以使用我正在使用的库来实现这一点,或者我应该修改它吗?

4

1 回答 1

1

我遇到过同样的问题。在 Matthieu 的帮助下解决了这个问题。基于 ViewPagerIndicator 附带的示例。

基本上是在页面更改时监听并更改适配器以根据当前位置给出不同的页面标题。下面给出的代码对我来说很简单。

如果您有这些示例工作并且您只是替换这两个文件,那么试试这个示例

像这样更改了 TestFragmentAdapter 的代码:

class TestFragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
    protected static final String[] CONTENT = new String[] { "This", "Is", "stack", "overflow"  };
    protected static final int[] ICONS = new int[] {
        R.drawable.perm_group_calendar,
        R.drawable.perm_group_camera,
        R.drawable.perm_group_device_alarms,
        R.drawable.perm_group_location
};

private int mCount = CONTENT.length;

// CHANGE START HERE
private int current_position=0;

public void set_current_position(int i) {
    current_position = i;
}
// CHANGE ENDS HERE

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

@Override
public Fragment getItem(int position) {
    return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
}

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

@Override
public CharSequence getPageTitle(int position) {
    // CHANGE START HERE
    if (position == current_position-1) {
        return "Previous";
    } else if (position == current_position+1) {
        return "Next";
    }
    // CHANGE ENDS HERE
    return TestFragmentAdapter.CONTENT[position % CONTENT.length];
}

@Override
public int getIconResId(int index) {
  return ICONS[index % ICONS.length];
}

public void setCount(int count) {
    if (count > 0 && count <= 10) {
        mCount = count;
        notifyDataSetChanged();
    }
}
}

像这样的 SampleTitlesDefault 代码(添加了 OnPageChangeListener)

public class SampleTitlesDefault extends BaseSampleActivity implements ViewPager.OnPageChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_titles);

    mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

    mPager = (ViewPager)findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
    // CHANGE START HERE
    mIndicator.setOnPageChangeListener(this);
    // CHANGE ENDS HERE
}

// CHANGE START HERE
@Override
public void onPageScrolled(int i, float v, int i1) {
}

@Override
public void onPageSelected(int i) {
    mPager = (ViewPager)findViewById(R.id.pager);
    ((TestFragmentAdapter)mPager.getAdapter()).set_current_position(i);
}

@Override
public void onPageScrollStateChanged(int i) {
}
// CHANGE ENDS HERE
}
于 2012-12-08T11:02:15.773 回答