Android技术——切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi


一、早期android(android.support.v4)提供了一系列支持Fragment滑动切换的类。主要是:

1、ViewPager:它时Fragment容器,能够同一时候管理多个Fragment,并同意多个Fragment切换时提供动画效果。

2、FragmentPagerAdapter:Adapter类。用于为ViewPager提供多个Fragment。此类通常须要扩展。

3、PagerTitleStrip:与ViewPager结合使用,用于在ViewPager上显示“导航条”。

二、借助ViewPage实现Tab滑动导航的过程例如以下:

step1:扩展得到自己的FragmentPagerAdapter

step2:扩展得到自己的SimpleOnPageChangeListener。这个主要时在ViewPager滑动选择时候被触发。因此在这里面一般是放置切换Fragment的代码。

step3:向ViewPager加入自己的FragmentPagerAdapter和自己的SimpleOnPageChangeListener。

示比例如以下:

(本项目是在上文“Android技术——滑动切换(一)实现Tab导航”项目基础上加入而来)

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MeiNvFragment_V4.java文件(事实上这个类和上文中的MeiNvFragment的内容一模一样。仅仅是MeiNvFragment_V4是继承自android.support.v4.app.Fragment而已)

package com.example.tab_nav;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

public class MeiNvFragment_V4 extends Fragment

{

    public static int[]  img_ids;

    public static String Fragment_Key = "Fragment_Key";

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

            Bundle savedInstanceState)

    {

        View v = inflater.inflate(R.layout.fragment_layout, null);

        ImageView img_meinv = (ImageView) v.findViewById(R.id.img_meinv);

        // 获取创建该Fragment时传入的參数Bundle

        Bundle args = getArguments();

        img_meinv.setImageResource(img_ids[args.getInt(Fragment_Key)]);

        return v;

    }

}

/MeiNv_Liulanqi/src/com/example/meinv_liulanqi/ViewPagerActivity.java文件:

package com.example.tab_nav;

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;

import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;

public class ViewPagerActivity extends FragmentActivity

// 因为FragmentPagerAdapter仅仅在android.support.v4中定义

// 而android.support.v4.app.FragmentActivity的实例化须要传入android.support.v4.app.FragmentManager。

// 这个特殊的FragmentManager仅仅能通过FragmentActivity的getSupportFragmentManager方法得到,

// 所以ViewPagerActivity必须继承android.support.v4.app.FragmentActivity

{

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_view_pager);

        MeiNvFragment_V4.img_ids = new int[] { R.drawable.linzhiling,

                R.drawable.liuyan, R.drawable.yangmi };

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

        // 为ViewPager加入FragmentPagerAdapter

        myFragmentPagerAdapter adapter = new myFragmentPagerAdapter(

                getSupportFragmentManager());

        pager.setAdapter(adapter);

        // 为ViewPager加入事件监听器

        mySimpleOnPageChangeListener listener = new mySimpleOnPageChangeListener(

                pager);

        pager.setOnPageChangeListener(listener);

    }

    // 扩展得到自己的FragmentPagerAdapter

    class myFragmentPagerAdapter extends FragmentPagerAdapter

    {

        public myFragmentPagerAdapter(FragmentManager fm)

        {

            super(fm);

            // TODO Auto-generated constructor stub

        }

        // 获取指定位置的Fragment

        @Override

        public Fragment getItem(int arg0)

        {

            Fragment f = new MeiNvFragment_V4();

            Bundle b = new Bundle();

            b.putInt(MeiNvFragment.Fragment_Key, arg0);

            f.setArguments(b);

            return f;

        }

        // 指出该Adapter包括Fragment的数目

        @Override

        public int getCount()

        {

            // TODO Auto-generated method stub

            return MeiNvFragment_V4.img_ids.length;

        }

        @Override

        public CharSequence getPageTitle(int position)

        {

            return "第" + (position + 1) + "个美女";

        }

    }

    // 扩展得到自己的SimpleOnPageChangeListener

    class mySimpleOnPageChangeListener extends SimpleOnPageChangeListener

    {

        private ViewPager pager;

        public mySimpleOnPageChangeListener(ViewPager p)

        {

            pager = p;

        }

        public void onPageSelected(int position)

        {

            pager.setCurrentItem(position);

        }

    }

}

/MeiNv_Liulanqi/res/layout/activity_view_pager.xml文件:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/pager"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <android.support.v4.view.PagerTitleStrip

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_gravity="top" >

    </android.support.v4.view.PagerTitleStrip>

</android.support.v4.view.ViewPager>

启动ViewPagerActivity 后的效果:

正在从第一个美女向第二个美女滑动中。


版权声明:本文博主原创文章。博客,未经同意不得转载。

Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览的更多相关文章

  1. Android技术面试整理

    前19题为常考题目!!  1.Android的四大组件是哪些,它们的作用? 2.请介绍下Android中常用的五种布局. 3.android中的动画有哪几类,它们的特点和区别是什么 4.android ...

  2. android技术总结

    1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hierarchyview工具查看优化. ②复用convertView ③使用ViewHol ...

  3. android 语言切换过程分析

    android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...

  4. iOS开发:使用Tab Bar切换视图

    iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Conten ...

  5. Android 更新UI的两个方法

    Android 更新UI的两个方法 在Android的开发过程中,常常需要适时的更新UI.Androd中的UI是在主线程中更新的.如果在主线程之外的线程中直接更新,就会出现报错并抛出异常: andro ...

  6. ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...

  7. 【新版】Android技术博客精华汇总

    [新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...

  8. Android技术分享-文字转语音并朗读

    Android技术分享-文字转语音并朗读 最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来.下面我将我的做法分享一下. 非常令人开心的是,Android系统目前已经集成了TTS,提供了 ...

  9. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

随机推荐

  1. RabbitMq消息序列化简述

    涉及网络传输的应用.序列化不可避免. 发送端以某种规则将消息转成byte数组进行发送. 接收端则以约定的规则进行byte[]数组的解析. 序列化的选择能够是jdk序列化,hessian,jackson ...

  2. HDU 2829 Lawrence(动态规划-四边形不等式)

    Lawrence Problem Description T. E. Lawrence was a controversial figure during World War I. He was a ...

  3. 2012 PHP热门资料64个+经典源码50个——下载目录 :

    完整附件0豆下载:http://down.51cto.com/data/419216 附件部分预览: PHP精彩应用实例程序源码集锦 http://down.51cto.com/zt/39 无师自通: ...

  4. 如何添加地图控件到Windows Phone 8的页面中

    原文 如何添加地图控件到Windows Phone 8的页面中 本主题介绍了各种方法来添加一个地图控件到Windows Phone 8的项目.该地图控件在Windows Phone的SDK 8.0的库 ...

  5. Learning Cocos2d-x for WP8(7)——让Sprite动起来

    原文:Learning Cocos2d-x for WP8(7)--让Sprite动起来 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(7)——让Sprite动起来 本讲将 ...

  6. java获取当前日期时间代码总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值.  方法如下: 要使用 java.util.Date .获取当前时间的代码如下  代码如下 复制代码 Date date = new ...

  7. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  8. centos下ant的安装

    1.创建一个文件夹,用于安装ant.我们这里临时在/usr文件夹下创建ant文件夹. 2.下载 cd /usr/ant进入该文件夹,使用wget  ant的下载地址  下载ant到当前文件夹下.附an ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...

  10. 关于bind函数和connect函数的测试结论

    1. 一般客户端不用绑定,系统给你自动分配(有些ip不是固定的,bind也不是一个好方法):而服务器需要绑定,因为需要给客户端一个众所周知的固定的地址: 2. 关于bind错误,可以用WSAGetLa ...