ViewPager结合Fragment的使用

一、Fragment简介

  Android在3.0版本引入了Fragment(碎片)功能,它类似于Activity,也可以 包含布局,而且Fragment通常是嵌套在Activity中使用的。

  场景:有两个Fragment,其中Fragment1包含了一个ListView,每行显示一本 书的标题,而Fragment2包含了TextView和ImageView,显示书的详细内容和图片。

ViewPager结合Fragment的使用_第1张图片

 想想,如果一个很大的界面,就设计成一个布局,写起界面来是不是会有很多麻 烦?如果组件多的话,是不是管理起来也很麻烦!

而使用Fragment,可以把屏幕划分成几块,然后进行分组,进行一个模块化的 管理,从而可以更加方便的在运行过程中动态地更新Activity的用户界面。

  1、Fragment的优势

ViewPager结合Fragment的使用_第2张图片

 注意!!!

        Fragment并不能单独使用,它需要嵌套在Activity中使用,同时当宿主Activity 被destory销毁了,它也会跟着被销毁!

  2、Fragment的基本用法

   步骤1:定制Fragment的XML布局文件

ViewPager结合Fragment的使用_第3张图片

   步骤2:创建一个自定义的Fragment,继承Fragment类,和创建一个Activity很类似, 不同的是需要重写一个onCreateView()方法来返回这个Fragment的布局。

ViewPager结合Fragment的使用_第4张图片

 步骤3:定义Fragment适配器,管理所有的Fragment。

ViewPager结合Fragment的使用_第5张图片

 步骤4:将Fragment添加到activity页面。

ViewPager结合Fragment的使用_第6张图片

二、FragmentPagerAdapter适配器

1、FragmentPagerAdapter派生自PagerAdapter,它是专门用来呈现 Fragment页面的。

2、该类中每一个生成的Fragment都将保存在内存中,所以这个适配器更适合那些数量相对较少,静态的页面。对于存在多个fragment的情况,一般推荐使用FragmentStatePagerAdapter。

3、FragmentPagerAdapter重载了几个必须实现的函数:getItem()、 getCount()。

  1、Activity、FragmentActivity和AppCompatActivity的区别

1、Activity是最基础的页面类,对应getFragmentManager方法来控制Activity和 Fragment之间的交互。

2、FragmentActivity间接继承自Activity,并提供了对v4包中support Fragment的支 持。在FragmentActivity中必须使用getSupportFragmentManager方法来处理 support Fragment的交互。

3、AppCompatActivity继承自FragmentActivity,为Material Design风格控件提供 了便利。

三、程序代码

  1、布局文件代码

    activity_main.xml



    
    

    layout1.xml



    

    layout2.xml



    

    layout3.xml



    

  2、功能代码

    FragAdapter.java

package com.example.fragmenttest;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
public class FragAdapter extends FragmentPagerAdapter {
    //1.创建Fragment数组
    private List mFragments;
    //2.接收从Activity页面传递过来的Fragment数组
    public FragAdapter(FragmentManager fm,List fragments){
        super(fm);
        mFragments = fragments;
    }
    @Override
    public Fragment getItem(int i) {
        return mFragments.get(i);
    }
    @Override
    public int getCount() {
        return mFragments.size();
    }
}

    FragMent1.java

package com.example.fragmenttest;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       //1.创建View视图
        View view = inflater.inflate(R.layout.layout1,container,false);
        //2.返回view视图
        return  view ;
    }
}

    FragMent2.java

package com.example.fragmenttest;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout2,container,false);
        return  view;
    }
}

    FragMent3.java

package com.example.fragmenttest;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment3 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout3,container,false);
        return  view;
    }
}

    MainActivity.java

package com.example.fragmenttest;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends FragmentActivity {

    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //1.构造Fragment列表
        List fragments = new ArrayList();
        //2.将前面定义的三个Fragment类对应的实例放入Fragment列表
        fragments.add(new Fragment1());
        fragments.add(new Fragment2());
        fragments.add(new Fragment3());
        //3.构造Fragment适配器
        FragAdapter adapter = new FragAdapter(getSupportFragmentManager(),fragments);
        //4.创建ViewPager实例,并绑定适配器
        viewPager = findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);

    }
}

你可能感兴趣的:(ViewPager控件,android,android,studio,viewpager)