ViewPager结合Fragment的使用
一、Fragment简介Android在3.0版本引入了Fragment(碎片)功能,它类似于Activity,也可以 包含布局,而且Fragment通常是嵌套在Activity中使用的。场景:有两个Fragment,其中Fragment1包含了一个ListView,每行显示一本 书的标题,而Fragment2包含了TextView和ImageView,显示书的详细内容和图片。想想,如果一个很大的
一、Fragment简介
Android在3.0版本引入了Fragment(碎片)功能,它类似于Activity,也可以 包含布局,而且Fragment通常是嵌套在Activity中使用的。
场景:有两个Fragment,其中Fragment1包含了一个ListView,每行显示一本 书的标题,而Fragment2包含了TextView和ImageView,显示书的详细内容和图片。
想想,如果一个很大的界面,就设计成一个布局,写起界面来是不是会有很多麻 烦?如果组件多的话,是不是管理起来也很麻烦!
而使用Fragment,可以把屏幕划分成几块,然后进行分组,进行一个模块化的 管理,从而可以更加方便的在运行过程中动态地更新Activity的用户界面。
1、Fragment的优势
注意!!!
Fragment并不能单独使用,它需要嵌套在Activity中使用,同时当宿主Activity 被destory销毁了,它也会跟着被销毁!
2、Fragment的基本用法
步骤1:定制Fragment的XML布局文件
步骤2:创建一个自定义的Fragment,继承Fragment类,和创建一个Activity很类似, 不同的是需要重写一个onCreateView()方法来返回这个Fragment的布局。
步骤3:定义Fragment适配器,管理所有的Fragment。
步骤4:将Fragment添加到activity页面。
二、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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</LinearLayout>
layout1.xml
<?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">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/view1"/>
</RelativeLayout>
layout2.xml
<?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">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/view2"/>
</RelativeLayout>
layout3.xml
<?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">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/view3"/>
</RelativeLayout>
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<Fragment> mFragments;
//2.接收从Activity页面传递过来的Fragment数组
public FragAdapter(FragmentManager fm,List<Fragment> 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<Fragment> fragments = new ArrayList<Fragment>();
//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);
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)