gpt4 book ai didi

java - 如何使用 fragment 将标题放入 ViewPager?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:15 26 4
gpt4 key购买 nike

我正在使用 ViewPager 允许用户在 fragment 之间滑动。

如何将每个 fragment 的标题添加到屏幕?

package com.multi.andres;

import java.util.List;
import java.util.Vector;

import com.viewpagerindicator.TitlePageIndicator;
import com.viewpagerindicator.TitleProvider;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class ViewPagerFragment extends FragmentActivity{

private PagerAdapter mPagerAdapter; //contiene el pager adapter
private static String[] titulosPaginas = { "APP 1", "APP 2" };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.lcmeter); //layout que contiene el ViewPager

initialisePaging(); //inicializo las paginas
}

private void initialisePaging() {

List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, FragmentPrueba1.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentPrueba2.class.getName()));
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);

ViewPager pager = (ViewPager)super.findViewById(R.id.pager);
pager.setAdapter(this.mPagerAdapter);

//Agrega los titulos
TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.titulos); //layout XML
titleIndicator.setViewPager(pager);
}

/** *************************************************************************************************
/** Clase: public class PagerAdapter extends FragmentPagerAdapter implements TitleProvider
/** Notas: extends FragmentPagerAdapter permite el uso de las paginas de ViewPager pero con Fragments
/** implements TitleProvider permite el uso de los titulos en las paginas
/** Funcion: crea paginas por las cuales deslizarse horizontalmente las cuales son usadas
****************************************************************************************************/
public class PagerAdapter extends FragmentPagerAdapter implements TitleProvider {

private List<Fragment> fragments;

public String getTitle(int position) {
// TODO Auto-generated method stub
return titulosPaginas[position]; // titulo de la pagina
}

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

@Override
public int getCount() {
return this.fragments.size();
}

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

}

}

但它不显示ViewPager 的标题,我不知道为什么。我之前将 ViewPager 与标题一起使用,但不与 fragment 一起使用,现在我无法让标题工作。

最佳答案

您还可以使用 Jake Wharton 的 ViewPagerIndicator库以获得所需的效果。 Davek804 的答案也有效,但它要求您引用整个 ActionBarSherlock 库,如果您只需要一个支持自定义/样式化标题的 ViewPager,这不是最好的选择。

要使其正常工作,只需编写一小段 XML,在 Activity 中初始化 ViewPager,并实现一个 FragmentAdapter(扩展 FragmentPagerAdapter 实现 TitleProvider)以指定哪些页面包含哪些 Fragment

  1. XML 布局

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.viewpagerindicator.TabPageIndicator
    android:id="@+id/titles"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"/>

    <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

    </LinearLayout>
  2. 在您的Activity

    中初始化
    //Set the pager with an adapter
    ViewPager pager = (ViewPager)findViewById(R.id.pager);
    pager.setAdapter(new CustomAdapter(getSupportFragmentManager()));

    //Bind the title indicator to the adapter
    TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.titles);
    titleIndicator.setViewPager(pager);
  3. 实现一个CustomFragmentAdapter

    public static class CustomFragmentAdapter extends FragmentPagerAdapter 
    implements TitleProvider {

    public static final int POSITION_PAGE_1 = 0;
    public static final int POSITION_PAGE_2 = 1;
    public static final int POSITION_PAGE_3 = 2;

    private static final String[] TITLES = new String[] {
    "Title 1",
    "Title 2",
    "Title 3"
    };

    public static final int NUM_TITLES = TITLES.length;

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

    @Override
    public Fragment getItem(int position) {
    switch (position) {
    case POSITION_TITLE_1:
    return PageOneFragment.newInstance();
    case POSITION_TITLE_2:
    return PageTwoFragment.newInstance();
    case POSITION_TITLE_3:
    return PageThreeFragment.newInstance();
    }
    return null;
    }

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

    @Override
    public String getTitle(int position) {
    return TITLES[position % NUM_TITLES].toUpperCase();
    }
    }

编辑:

ViewPagerIndicator库支持标题功能:

  1. TitlePageIndicator

    TitlePageIndicator

  2. TabPageIndicator

    TabPageIndicator

  3. CirclePageIndicator

    CirclePageIndicator

关于java - 如何使用 fragment 将标题放入 ViewPager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com