Android教程:使用ViewPager

当前,ViewPager是Android库中最受欢迎的Widget之一。 它已在多个最常用的Android应用中实现,例如Google Play应用和我自己的应用之一RBRecorder

RBRecorder

GooglePlay

ViewPager是允许用户向左或向右滑动以查看全新屏幕的小部件。 从某种意义上讲,这是向用户显示多个选项卡的一种更好的方法。 它还具有随时动态添加和删除页面(或选项卡)的能力。 考虑将搜索结果按某些类别分组,并在单独的列表中显示每个类别的想法。 使用ViewPager,用户可以向左或向右滑动以查看其他分类列表。 使用ViewPager需要同时了解Fragments和PageAdapters。 在这种情况下,片段就是“页面”。 ViewPager允许用户滚动到的每个屏幕实际上都是一个Fragment。 通过在此处使用“片段”而不是“视图”,我们可以在每个页面中显示更多的可能性。 我们不仅限于项目列表。 这可以是我们可能需要的任何视图和小部件集合。 您可以以与想到ListAdapters相同的方式来考虑PageAdapters。 页面适配器的工作是向用户界面提供片段(而不是视图)以进行绘制。

我整理了一个快速教程,仅需几个步骤即可启动并运行ViewPager(与支持库一起使用)。 本教程采用了更多的自顶向下方法。 它从应用程序向下移动到片段。 如果您想直接进入源代码,可以在此处获取项目。

在应用程序级别

在开始之前,重要的是要确保从您的SDK更新了支持库,并且该库本身已包含在您的项目中。 尽管ViewPager和Fragments是Android中较新的结构,但通过使用支持库将它们移植回旧版本的Android很容易。 要将库添加到项目中,您需要在项目中创建一个“ libs”文件夹,然后将JAR文件放入其中。有关此步骤的更多信息,请在开发人员站点的支持库帮助页面上查看此页面。 。

设置布局文件

下一步是将ViewPager添加到活动的布局文件中。 此步骤需要您深入了解布局文件的XML,而不是使用GUI布局编辑器。 您的布局文件应如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

     xmlns:tools="http://schemas.android.com/tools"

     android:layout_width="match_parent"

     android:layout_height="match_parent" >


       <android.support.v4.view.ViewPager

         android:id="@+id/viewpager"

         android:layout_width="fill_parent"

         android:layout_height="fill_parent" />


    </RelativeLayout>

实施活动

现在,我们将主要活动组合在一起。 该活动的主要收获如下:

  • 该类继承自FragmentActivity而不是Activity
  • 此Activity“具有” PageAdapter对象和Fragment对象,稍后我们将对其进行定义
  • 该活动需要初始化它自己的PageAdapter
public class PageViewActivity extends FragmentActivity {

      MyPageAdapter pageAdapter;

      @Override

      public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_page_view);

        List<Fragment> fragments = getFragments();

        pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);

        ViewPager pager = (ViewPager)findViewById(R.id.viewpager);

        pager.setAdapter(pageAdapter);

      }

    }

实现PageAdapter

现在我们已经涵盖了FragmentActivity,我们需要创建PageAdapter。 这是一个从FragmentPageAdapater类继承的类。 在创建此类时,我们有两个目标:

  • 确保适配器具有我们的片段列表
  • 确保它为活动提供了正确的片段
class MyPageAdapter extends FragmentPagerAdapter {

      private List<Fragment> fragments;


      public MyPageAdapter(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后,现在所需的只是Fragments本身。 我们需要实现两件事:

  1. PageViewActivity中的getFragment方法
  2. MyFragment类

1. getFragment方法很简单。 唯一的问题是如何创建实际的片段。 现在,我们将把这个逻辑留给MyFragment类。

private List<Fragment> getFragments(){

      List<Fragment> fList = new ArrayList<Fragment>();

     

      fList.add(MyFragment.newInstance("Fragment 1"));

      fList.add(MyFragment.newInstance("Fragment 2")); 

      fList.add(MyFragment.newInstance("Fragment 3"));

     

      return fList;

    }

2. MyFragment类还具有自己的布局文件。 对于此示例,布局文件仅包含一个简单的TextView。 我们将使用此TextView告诉我们当前正在查看哪个Fragment(注意getFragments代码,我们正在newInstance方法中传入String)。

<?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

      android:layout_width="match_parent"

      android:layout_height="match_parent"

      android:orientation="vertical" >


      <TextView

        android:id="@+id/textView"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:textAppearance="?android:attr/textAppearanceLarge" />


    </RelativeLayout>

现在是Fragment代码本身:唯一的技巧是,我们使用静态类方法创建片段,然后使用Bundle将信息传递给Fragment对象本身。

public class MyFragment extends Fragment {

     public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

     

     public static final MyFragment newInstance(String message)

     {

       MyFragment f = new MyFragment();

       Bundle bdl = new Bundle(1);

       bdl.putString(EXTRA_MESSAGE, message);

       f.setArguments(bdl);

       return f;

     }

     

     @Override

     public View onCreateView(LayoutInflater inflater, ViewGroup container,

       Bundle savedInstanceState) {

       String message = getArguments().getString(EXTRA_MESSAGE);

       View v = inflater.inflate(R.layout.myfragment_layout, container, false);

       TextView messageTextView = (TextView)v.findViewById(R.id.textView);

       messageTextView.setText(message);

     

       return v;

     }

    }

而已! 使用上面的代码,您可以轻松地启动并运行一个简单的页面适配器。 您还可以从GitHub获取以上教程的源代码

对于更多高级开发人员

实际上,那里有几种不同类型的FragmentPageAdapters。 重要的是要知道它们是什么以及它们是做什么的,因为在使用ViewPager创建复杂的应用程序时,了解这些信息可以为您节省一些时间。 FragmentPagerAdapter是要使用的更通用的PageAdapter。 只要用户可以潜在地返回该片段,该版本就不会破坏它拥有的片段。 这个想法是该PageAdapter主要用于“静态”或不变的Fragment。 如果您具有动态性更高且经常更改的片段,则可能需要查看FragmentStatePagerAdapter 。 该适配器对动态Fragments更为友好,并且不消耗比FragmentPagerAdapter更大的内存。

参考: Android教程:使用我们来自JCG合作伙伴 Isaac Taylor 的ViewPager(来自“ 编程移动”博客)。

翻译自: https://www.javacodegeeks.com/2013/04/android-tutorial-using-the-viewpager.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值