Android Fragment滑动组件ViewPager的实例详解

Android Fragment滑动组件ViewPager的实例详解

1适配器FragmentPagerAdapter的实现

对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了。

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
  private List<Fragment> list;
  public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
    super(fm);
    this.list = list;
  }
  //返回了当前要滑动的View的个数
  @Override
  public int getCount() {
    return list.size();
  }
  //在getItem(int arg0)中,根据传来的参数arg0,来返回当前要显示的fragment
  @Override
  public Fragment getItem(int arg0) {
    return list.get(arg0);
  }
}

2两个Fragment类

OrderFragment.java

public class OrderFragment extends Fragment {
  //在onCreateView()中返回要显示的View
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view= inflater.inflate(R.layout.fragment_order, container, false);
    //View中控件的操作方法
    refresh = view.findViewById(R.id.order_count_refresh);
    refresh.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        //操作逻辑
        countStatus();
      }
    });
    return view;
  }
}

fragment_order.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:background="#ffffff"
  android:orientation="vertical" >

  <Button android:id="@+id/fragment1_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="show toast"
    />
</LinearLayout>

MeFragment.java

public class MeFragment extends Fragment {
  //在onCreateView()中返回要显示的View
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view= inflater.inflate(R.layout.fragment_me, container, false);
    //View中控件的操作方法
    login = view.findViewById(R.id.me_login);
    login.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        startActivity(new Intent(MeFragment.this.getActivity(),
            LoginActivity.class));
      }
    });
    return view;
  }
}

fragment_me.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:background="#ffff00"
  android:orientation="vertical" >

</LinearLayout>

3主activity实现

public class MainActivity extends FragmentActivity {
  private ViewPager mPager;
  private List<Fragment> fragmentList;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mPager = (ViewPager) findViewById(R.id.viewpager);
    //初始化fragment
    List<Fragment> fragmentList=new ArrayList<Fragment>();
    fragmentList.add(new OrderFragment());
    fragmentList.add(new MeFragment());
    FragAdapter adapter = new FragAdapter(getSupportFragmentManager(), fragments);

    //给ViewPager设置适配器
    mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList));
    mPager.setCurrentItem(0);// 设置当前显示标签页为第一页
    //MyOnPageChangeListener()是页面变化监听器
    mPager.setOnPageChangeListener(new MyOnPageChangeListener());
    radioGroup = (RadioGroup) findViewById(R.id.main_tab);
    //给radioGroup设置监听器
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
        if(checkedId == R.id.tab_me){
          mPager.setCurrentItem(INDEX_ME);
        }else if(checkedId == R.id.tab_shoujian){
          mPager.setCurrentItem(INDEX_SHOUJIAN);
        }
      }
    });
  }
  //实现页面变化监听器OnPageChangeListener
  public class MyOnPageChangeListener implements OnPageChangeListener {
    @Override
    //当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法会一直得到调用。
    /**
      * arg0:当前页面,及你点击滑动的页面
      * arg1:当前页面偏移的百分比
      *arg2:当前页面偏移的像素位置
      */
    public void onPageScrolled(int arg0, float arg1, int arg2) {
      // TODO Auto-generated method stub
    }

    @Override
    //当页面状态改变的时候调用
     /**
      * arg0
      * 1:表示正在滑动
      * 2:表示滑动完毕
      * 0:表示什么都没做,就是停在那
      */
    public void onPageScrollStateChanged(int arg0) {
      // TODO Auto-generated method stub
    }

    @Override
    //页面跳转完后调用此方法
    /**
     * arg0是页面跳转完后得到的页面的Position(位置编号)。
     */
    public void onPageSelected(int arg0) {
      // TODO Auto-generated method stub
      switch (arg0) {
      case INDEX_ME:
        radioGroup.check(R.id.tab_me);
        break;
      case INDEX_SHOUJIAN:
        radioGroup.check(R.id.tab_shoujian);
        break;
      }
    }
  }

}

activity_main.xml

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

 <android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:layout_marginBottom="60dip"
    android:flipInterval="30"
    android:persistentDrawingCache="animation"/> 

  <RadioGroup
    android:id="@+id/main_tab"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_alignParentBottom="true"
    android:layout_height="60dip"> 

    <RadioButton
      style="@style/main_tab"
      android:id="@+id/tab_shoujian"
      <!--图片在文字的上面-->
      android:drawableTop="@drawable/tab_shoujian_selector"
      android:layout_height="match_parent"
      android:checked="true"
      android:text="****" />
    <RadioButton
      style="@style/main_tab"
      android:id="@+id/tab_me"
      android:drawableTop="@drawable/tab_me_selector"
      android:layout_height="match_parent"
      android:text="*" />
  </RadioGroup>
</RelativeLayout>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android中ViewPager实现滑动指示条及与Fragment的配合

    自主实现滑动指示条 先上效果图: 1.XML布局 布局代码如下: <LinearLayout 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

  • Android App中使用ViewPager+Fragment实现滑动切换效果

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android-support-v4.jar.细节无法控制.不过现在情况已经不一样了,android-support-v4中提供了很多实用的功能,以至于现在新建一个android工程默认都会导入这个jar包.那我们就也采用viewpager来做滑动吧.另外一个概念就是Fragment和FragmentActivit

  • Android中ViewPager和Fragment的使用

    小案例 XML中 <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> 创建Fragment fragments = new Arr

  • Android App中ViewPager与Fragment结合的一些问题解决

    在了解ViewPager的工作原理之前,先回顾ListView的工作原理: ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象:如果为所有的列表项数据创建视图对象,会浪费内存: ListView找谁去申请视图对象呢? 答案是adapter.adapter是一个控制器对象,负责从模型层获取数据,创建并填充必要的视图对象,将准备好的视图对象返回给ListView: 首先,通过调用adapter的getCount()方法,ListView询问数组列表中包含多少个对象(为避免出现数组

  • Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment类似的方法.下面就给大家介绍下Android中ViewPager获取当前显示的Fragment的方法,一起看看吧. 一.使用 getSupportFragmentManager().findFragmentByTag()方法 Viewpager + FragmentPagerAdapter 情况下

  • Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果

    BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退.于是就用这种方式实现了,效果还不错.github有详细说明,多余的就不说了. 这个roughike是这个项目的所有者(大神致敬). 我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment). 首先是dependen

  • Android基于ViewPager Fragment实现选项卡

    先给大家展示效果图: 1.新建TestFragmen继承Fragment public class TestFragment extends Fragment { private static final String TAG = "TestFragment"; private String hello;// = "hello android"; private String defaultHello = "default value"; pri

  • Android App在ViewPager中使用Fragment的实例讲解

    据说Android最推荐的是在ViewPager中使用FragMent,即ViewPager中的页面不像前面那样用LayoutInflater直接从布局文件加载,而是一个个Fragment.注意这里的Fragment 是android.support.v4.view包里的Fragment,而不是android.app包里的Fragment. 使用v4包里的Fragment的Activity必须继承自FragmentActivity. 其实使用Fragment与前面不使用Fragment非常类似:

  • Android Fragment滑动组件ViewPager的实例详解

    Android Fragment滑动组件ViewPager的实例详解 1适配器FragmentPagerAdapter的实现 对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了. public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyFragmentPagerAdapter

  • Android HorizontalScrollView滑动与ViewPager切换案例详解

    layout布局 <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" tools:co

  • Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置),view.ScollyBy是对view的内容的移动(移动距离) 在次activity中,当手指点击TextView ,此时是ViewGroup 响应还是TextView响应呢? 代码实践: 在activity中重写onTouchEvent(): public boolean onTouchEvent

  • 移动端滑动切换组件封装 vue-swiper-router实例详解

    具体代码如下所述: <strong>组件部分</strong> <template> <div class="main"> <div class="page-tab"> <div :class="nowPath == item.path ? 'tab-item tab-item_active' : 'tab-item'" v-for='(item, index) in tabLis

  • Android 自定义imageview实现图片缩放实例详解

    Android 自定义imageview实现图片缩放实例详解 觉得这个自定义的imageview很好用 性能不错  所以拿出来分享给大家  因为不会做gif图  所以项目效果 就不好贴出来了  把代码贴出来 1.项目结构图 2.Compat.class package com.suo.image; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.view.View; pu

  • Android Flutter表格组件Table的使用详解

    目录 Table.TabRow.TabCell 小结 之前开发中用到的表格,本篇文章主要介绍如何在页面中使用表格做一个记录. Table组件不同于其它Flex布局,它是直接继承的RenderObjectWidget的.相当于是一个独立的组件,区别与其他系列组件. Table.TabRow.TabCell 惯例,先看下Table相关的构造方法: Table({ Key? key, this.children = const <TableRow>[],//行列表 表示多少行 this.column

  • Android Jetpack导航组件Navigation创建使用详解

    目录 引言 依赖项 创建导航图 导航宿主 导航到目的地 传递参数 NavigationUI 多模块导航 引言 导航是指支持用户导航.进入和退出应用中不同内容片段的交互.Android Jetpack 的导航组件可实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对. 依赖项 def nav_version = "2.5.2" implementation "androidx.navigation:navigation-fragment-kt

  • Vue组件选项props实例详解

    前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息.本文将详细介绍Vue组件选项props 静态props 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,需要通过子组件的 props 选项 使用Prop传递数据

  • Android 通过网络图片路径查看图片实例详解

    Android 通过网络图片路径查看图片实例详解 1.在项目清单中添加网络访问权限 <!--访问网络的权限--> <uses-permission android:name="android.permission.INTERNET"/> 2.获取网络图片数据 /** * 获取网络图片的数据 * @param path 网络图片路径 * @return * @throws Exception */ public static byte[] getImage(Str

  • Android 拦截返回键事件的实例详解

    Android 拦截返回键事件的实例详解 KeyEvent类 Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的 按键事件和返回键有关的常量和方法有. KeyEvent.KEYCODE_BACK: 表示key类型为返回键 KeyEvent.ACTION_DOWN:表示事件为按下key,如果一直按住不放,则会不停产生此事件. KeyEvent.ACTION_UP:表示事件为为放开key,一次点击key过程只会调用一次. public final in

随机推荐