Android 向ViewPager添加标题

Android 向ViewPager添加标题,android,android-viewpager,Android,Android Viewpager,我已经为可切换选项卡设置了一个ViewPager,现在我想在页面顶部添加标题,以指示显示的片段 这是迄今为止的代码: 活动\u main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layou

我已经为可切换选项卡设置了一个ViewPager,现在我想在页面顶部添加标题,以指示显示的片段

这是迄今为止的代码:

活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

MainActivity.java

public class MainActivity extends FragmentActivity {

    private PagerAdapter mPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);

        this.initialisePaging();
    }

    private void initialisePaging() {

        List<Fragment> fragments = new Vector<Fragment>();

        // Add fragments here
        fragments.add(Fragment.instantiate(this, PickerFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, DisplayFragment.class.getName()));

        this.mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager(), fragments);
        ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
        pager.setAdapter(this.mPagerAdapter);
    }

}
public class PageAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}
public类MainActivity扩展了FragmentActivity{
私人寻呼器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.initialisePaging();
}
私有void initialisePaging(){
列表片段=新向量();
//在这里添加片段
add(Fragment.instantiate(this,PickerFragment.class.getName());
add(Fragment.instantiate(这个,DisplayFragment.class.getName());
this.mPagerAdapter=新的页面适配器(super.getSupportFragmentManager(),fragments);
ViewPager pager=(ViewPager)super.findViewById(R.id.ViewPager);
pager.setAdapter(this.mPagerAdapter);
}
}
PageAdapter.java

public class MainActivity extends FragmentActivity {

    private PagerAdapter mPagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);

        this.initialisePaging();
    }

    private void initialisePaging() {

        List<Fragment> fragments = new Vector<Fragment>();

        // Add fragments here
        fragments.add(Fragment.instantiate(this, PickerFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, DisplayFragment.class.getName()));

        this.mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager(), fragments);
        ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
        pager.setAdapter(this.mPagerAdapter);
    }

}
public class PageAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}
公共类PageAdapter扩展了FragmentPagerAdapter{
私有列表片段;
公共页面适配器(FragmentManager fm,列出片段){
超级(fm);
this.fragments=片段;
}
@凌驾
公共片段getItem(int位置){
返回此.fragments.get(位置);
}
@凌驾
public int getCount(){
返回此.fragments.size();
}
}
这很有效,我可以在两个标签之间滑动,但没有标题

我想以这样的方式结束:


如果您能帮助我设置此适配器,我将不胜感激。

您不需要自己实现适配器。简单的做法如下:

mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager() );

mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
而且你的布局缺少PagerTitleStrip,看到这个了吗

ViewPager只是一个容器。PagerTitleStrip应该包含在ViewPager布局中,这就是标题

按照评论中的建议,我看了之后做了以下工作:

mPagerAdapter  = new PageAdapter(super.getSupportFragmentManager() );

mPagerAdapter.addFragment(Fragment.instantiate(this, "Title that you want");
我在activity\u main.xml中添加了一个PagerTitleStrip

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <android.support.v4.view.PagerTitleStrip
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top" />
    </android.support.v4.view.ViewPager>

</LinearLayout>

主要功能是嵌套的viewpager。关于viewpager和title的一个很好的描述性讨论。 由于Android支持,您可以使用
TabLayout
类。它非常类似于
PagerTitleStrip
,您只需要在ViewPagerAdapter上指定标题

@Override
public CharSequence getPageTitle(int position) {
    return titleList.get(position);
}
并将其添加到xml中的任意位置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

在我看来,它看起来比
PagerTitleStrip
更好
TabLayout
也适用于类似于Google Play的标签。如果您想像@cjaym13所说的那样进行定制(更改选项卡颜色、文本颜色、所选颜色等),很容易实现。。有关更多详细信息,请参阅或

你想要一个(谷歌它作为一个教程,它很容易设置)。看看你是否想要更花哨的东西。你知道如何改变标题的颜色吗?我想要一个不同的颜色每页,我只知道如何应用的风格,改变所有的颜色。谢谢。@cjaym13我想你可以用“setTabIndicatorColor”。问题是,我不知道如何使用它做其他事情,比如让它看起来像棒棒糖的联系人应用程序:如何更改各个视图的标题?@bluemunch你可以有一个包含所有不同选项卡标题的字符串列表,然后使用
titlesList.get(position)
或类似的东西。谢谢,这是更好的视觉出框!