ViewPager,使用Fragment实现

  效果如图:

使用Fragment实现tab的缺点就是不能够滑动。不过应该也算优点,具体场景可以自由选择。

完整代码:imooc-tab022fragment,在我的百度云网盘上。

MainAcgtivity.java

  1 package com.example.imooc_tab02;
  2
  3 import android.os.Bundle;
  4 import android.support.v4.app.FragmentActivity;
  5 import android.support.v4.app.FragmentManager;
  6 import android.support.v4.app.FragmentTransaction;
  7 import android.view.View;
  8 import android.view.View.OnClickListener;
  9 import android.widget.ImageButton;
 10 import android.widget.LinearLayout;
 11
 12 public class MainActivity extends FragmentActivity implements OnClickListener {
 13     // tabs
 14     LinearLayout tab_weixin, tab_frd, tab_addr, tab_settings;
 15     // ImageButton
 16     ImageButton btn_weixin, btn_py, btn_txl, btn_sz;
 17
 18     tab01 t1;
 19     tab02 t2;
 20     tab03 t3;
 21     tab04 t4;
 22
 23     @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         setContentView(R.layout.main);
 27         t1 = new tab01();
 28         t2 = new tab02();
 29         t3 = new tab03();
 30         t4 = new tab04();
 31         initView();
 32         initEvents();
 33
 34         /*
 35          * 把tab添加到FrameLayout中,transaction的前一个参数是FrameLayout
 36          * 的id,第二个参数是Fragment的继承类的实例对象
 37          */
 38         // transaction.add(R.id.id_fragment, t1);
 39
 40     }
 41
 42     private void initEvents() {
 43         tab_weixin.setOnClickListener(this);
 44         tab_frd.setOnClickListener(this);
 45         tab_addr.setOnClickListener(this);
 46         tab_settings.setOnClickListener(this);
 47         tab_addr.callOnClick();//设置通讯录为默认点击,
 48     }
 49
 50     private void initView() {
 51         // TODO Auto-generated method stub
 52         tab_weixin = (LinearLayout) findViewById(R.id.id_tab_weixin2);
 53         // tab_frd,tab_addr,tab_settings
 54         tab_frd = (LinearLayout) findViewById(R.id.id_tab_frd2);
 55         tab_addr = (LinearLayout) findViewById(R.id.id_tab_address2);
 56         tab_settings = (LinearLayout) findViewById(R.id.id_tab_settings2);
 57
 58         // btn_weixin,btn_py,btn_txl,btn_sz;
 59         btn_weixin = (ImageButton) findViewById(R.id.id_imgbtn_wx);
 60         btn_py = (ImageButton) findViewById(R.id.id_imgbtn_py);
 61         btn_txl = (ImageButton) findViewById(R.id.id_imgbtn_txl);
 62         btn_sz = (ImageButton) findViewById(R.id.id_imgbtn_sz);
 63     }
 64
 65     @Override
 66     public void onClick(View v) {
 67         // TODO Auto-generated method stub
 68         FragmentManager manager = getSupportFragmentManager();
 69         FragmentTransaction transaction = manager.beginTransaction();
 70         hideFragment(transaction);
 71         switch (v.getId()) {
 72         case R.id.id_tab_weixin2:
 73             resetImg();
 74             if(!t1.isAdded()){
 75                 //如果fragment对象t1没有被添加,那么就添加并显示
 76                 transaction.add(R.id.id_fragment, t1);
 77             }
 78             transaction.show(t1);
 79             btn_weixin.setImageResource(R.drawable.tab_weixin_pressed);
 80             break;
 81         case R.id.id_tab_frd2:
 82             resetImg();
 83             if (!t2.isAdded()) {
 84                 transaction.add(R.id.id_fragment, t2);
 85             }
 86             transaction.show(t2);
 87             btn_py.setImageResource(R.drawable.tab_find_frd_pressed);
 88             break;
 89         case R.id.id_tab_address2:
 90             resetImg();
 91             if (!t3.isAdded()) {
 92                 transaction.add(R.id.id_fragment, t3);
 93             }
 94             transaction.show(t3);
 95             btn_txl.setImageResource(R.drawable.tab_address_pressed);
 96             break;
 97         case R.id.id_tab_settings2:
 98             resetImg();
 99             if (!t4.isAdded()) {
100                 transaction.add(R.id.id_fragment, t4);
101             }
102             transaction.show(t4);
103             btn_sz.setImageResource(R.drawable.tab_settings_pressed);
104             break;
105
106         default:
107             break;
108         }
109         transaction.commit();
110     }
111
112     private void hideFragment(FragmentTransaction transaction) {
113         System.out.println("====开始hideFragment()...====");
114         // TODO Auto-generated method stub
115         if (t1 != null) {
116             System.out.println("hide(t1)...");
117             transaction.hide(t1);
118         }
119         if (t2 != null) {
120             System.out.println("hide(t2)...");
121             transaction.hide(t2);
122         }
123         if (t3 != null) {
124             System.out.println("hide(t3)...");
125             transaction.hide(t3);
126         }
127         if (t4 != null) {
128             System.out.println("hide(t4)...");
129             transaction.hide(t4);
130         }
131     }
132
133     // 重置按钮为灰色的
134     public void resetImg() {
135         btn_weixin.setImageResource(R.drawable.tab_weixin_normal);
136         btn_py.setImageResource(R.drawable.tab_find_frd_normal);
137         btn_txl.setImageResource(R.drawable.tab_address_normal);
138         btn_sz.setImageResource(R.drawable.tab_settings_normal);
139     }
140 }
时间: 2024-07-30 13:14:19

ViewPager,使用Fragment实现的相关文章

如何使用viewpager与fragment写一个app导航activity

今天我们来看一下如何使用viewpager和fragment组合来写一个app导航activity,这里使用到了android开源控件viewpagerindicator,有兴趣的同学可以去它网站上看看它的介绍. 附上效果截图一张: demo中只有一个activity,是用activity_main.xml来布局,其内容如下: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:and

android开发之viewpager and Fragment

Android ViewPager和Fragment实现顶部导航界面滑动效果 Layout 管理器允许用户可以在页面上,左右滑动来翻动页面.你可以考虑实现PagerAdapter接口来显示 该效果.ViewPager很多时候会结合Fragment一块使用,这种方法使得管理每个页面的生命周期变得很方便. 些adapter的具体实现,可以适合于这种ViewPager结合Fragment使用的情况.这些adapter包括: 其中,有一FragmentPagerAdapter,和 FragmentSta

Android ViewPager和Fragment实现顶部导航界面滑动效果

在项目中,我们常常需要实现界面滑动切换的效果.例如,微信界面的左右滑动切换效果.那这种效果是怎么实现的?今天我就带大家简单了解ViewPager,并通过实例来实现该效果. 一. ViewPager 官方API 首先我们来看一下ViewPager官方给出的解释,如图: 具体意思如下: Layout 管理器允许用户可以在页面上,左右滑动来翻动页面.你可以考虑实现PagerAdapter接口来显示该效果. ViewPager很多时候会结合Fragment一块使用,这种方法使得管理每个页面的生命周期变得

ViewPager之Fragment页面切换

一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPager更为通用的实践:ViewPager搭配Fragment实现页面切换. 这种实现方式相对于上篇文章而言,可以更好的支持不同页面各自的复杂逻辑,与此同时,也能够保障页面之间的耦合度尽可能的低. 按照惯例,先晒出效果图:        二.实现思路 首先分析一下不同区域的交互需求: 中间灰色区域除了要支持三套

ViewPager结合Fragment进行无限滑动

实现ViewPager结合Fragment实现无限循环切换,这里也是在适配器里面进行的,当然使用滑动监听也能够实现 import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.ViewGroup; import java.util.Array

使用ViewPager切换Fragment时,防止频繁调用OnCreatView

使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPagerAdapter的源码,发现两个关键的地方 1 @Override 2 public Object instantiateItem(ViewGroup container, int position) { 3 if (mCurTransaction == null) { 4 mCurTransa

TabLayout与ViewPager和Fragment、FragmentPagerAdapter的合用

activity_main.xml 注意要把垂直设置好,因为是linearLayout布局,漏掉了就不能滑动了 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tool

可滑动的顶部导航页ViewPager和Fragment的使用

可滑动的顶部导航页ViewPager和Fragment的使用 通过ViewPager和Fragment实现侧滑切换导航栏的功能,如下图所示. 一.定义主布局文件main.xml 最上面是一个导航栏,分别有三个textview构成,然后再textview下面设置一个标签卡最下面是使用Android.support.v4.view.viewpager构成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2

viewpager中fragment的生命周期管理

viewpager中fragment的生命周期管理 - i_bobby - 开源中国社区 调试fragment的时候发现一个莫名其妙的事情,viewpager中包含4个fragment,其中第一个和第三个fragment是要联网取得数据的,如图: 界面刚进去的时候显示第一个fragment,通过log信息,我发现two fragment竟然"偷偷"走了一遍的生命周期!着实把我震惊了! 然后我滑动到two,发现第三个也"偷"了一遍生命周期,也就是说,手机在显示第二个不

关于ViewPager和Fragment配合使用生命周期的问题。

首先,我们这篇博文只探讨一个很小的问题. 就是在ViewPager和Fragment配合使用时的生命周期调用问题. 先给出结论吧: 1.当屏幕显示出你第N个Fragment时,你的第(N-1)和第(N+1)个Fragment会执行其生命周期到Onresume阶段. 2.除以上三个Fragment以外的全部fragment的所有方法都不会被调用. 下面是验证代码: 首先是我的MainActivity() public class MainActivity extends FragmentActiv