2012-12-08 51 views
1

我使用http://viewpagerindicator.com/库。我想创建一个TitlePageIndicator像Gmail应用程序下面的图片:的Android ViewPagerIndicator设置标题

enter image description here

我到底要达到其中的第一个标题是“较新”同样的事情,最后的标题是“旧”和中心标题'[总页数]'的[页面位置]。是否有可能通过我正在使用的库来实现此目的,还是应该修改它?

+0

您的查看寻呼机正在使用没有这些标题的适配器? – intrepidkarthi

回答

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 
} 
+0

这是工作,因为我想要的,但唯一的问题是,第一标题是“上一个”,而不是“1 120”时,应用程序打开。难道我做错了什么? – ipman

+0

您可以发布您的代码? – intrepidkarthi

+0

我解决了这个问题。的代码,而我试图问这里之前实现这一行是造成问题。删除该行后,它就像一个魅力。谢谢你这个伟大的答案。 – ipman