Fragment是什么
- Fragment是一种可以嵌入在活动中的UI片段,它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,并且可以在 Activity 运行时添加或删除Fragment。
Fragment静态加载怎么用
- 在项目目录下创建一个Fragment,然后在MainActivity的布局中加载Fragment
<fragment
android:name="com.example.yang.paopao.MyFragment"
android:id="@+id/myfragment_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
- android:name属性中是MyFragment.java(也就是创建的Fragment)的全名,android:id中是Fragment的唯一标识
Fragment动态加载怎么用
- 先创建两个Fragment,然后在Activity的布局中加入代码:
<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_parent"
android:orientation="horizontal"
tools:context="com.example.yang.paopao.MainActivity">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="页面一" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="页面二" />
</LinearLayout>
<FrameLayout
android:id="@+id/main_fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
- 加入两个按钮进行Fragment的切换操作,然后添加一个
<FrameLayout/>
容器 - 在MainActivity中增加如下代码
package com.example.yang.paopao;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn1, btn2;
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private HelloFragment helloFragment;
private ListFragment listFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
/**
* 初始化
*/
private void init() {
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
fragmentManager = getFragmentManager(); //调用FragmentManager()方法获取到FragmentManager
}
/**
* 按钮的点击事件
* @param v
*/
@Override
public void onClick(View v) {
fragmentTransaction = fragmentManager.beginTransaction(); //开启一个事务,通过调用beginTransaction()方法开启
switch (v.getId()) {
case R.id.btn1:
if (helloFragment == null) //判断这个Fragment是否实例化过,如果没有则实例化
helloFragment = new HelloFragment();
fragmentTransaction.replace(R.id.main_fragment, helloFragment); //向容器内加入Fragment
break;
case R.id.btn2:
if (listFragment == null)
listFragment = new ListFragment();
fragmentTransaction.replace(R.id.main_fragment, listFragment);
break;
default:
break;
}
fragmentTransaction.commit(); //提交事务
}
}
ViewPager+Fragment实现页卡滑动
- 创建3个Fragment并将其背景调成不同的颜色以便识别
- 然后在布局文件中添加ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
- 创建一个适配器类
MyAdapter
继承FragmentPagerAdapter
public class MyAdapter extends FragmentPagerAdapter {
private List<Fragment> list; //Fragment的集合
public MyAdapter(FragmentManager fm,List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int position) {
return list.get(position); //当前显示的Fragment
}
@Override
public int getCount() {
return list.size(); //Fragment的数量
}
}
- MainActivity的代码
public class ContactsActivity extends AppCompatActivity {
private FragmentManager fragmentManager;
private ViewPager viewPager;
private List<Fragment> list;
private MyAdapter myAdapter;
private Fragment1 fragment1;
private Fragment2 fragment2;
private Fragment3 fragment3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
init();
//实例化适配器
myAdapter = new MyAdapter(fragmentManager,list);
//获取布局中viewPager的id
viewPager = findViewById(R.id.viewPager);
//将适配器传入
viewPager.setAdapter(myAdapter);
//默认显示第一个页面
viewPager.setCurrentItem(0);
}
/**
* 初始化
*/
private void init() {
fragmentManager = getSupportFragmentManager();
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
//将Fragment放入list集合中
list = new ArrayList<>();
list.add(fragment1);
list.add(fragment2);
list.add(fragment3);
}
}
Fragment的生命周期
- Fragment生命周期图:
- Fragment与Activity生命周期对比图:
onAttached() —— 当fragment被加入到activity时调用
onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout
onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法
onDetach() —— 当fragment和activity分离的时候,调用这个方法当一个fragment被创建的时候,它会经历以下状态
- onAttach()
onCreate()
onCreateView()
onActivityCreated() - 当这个fragment对用户可见的时候,它会经历以下状态
- onStart()
onResume() - 当这个fragment不可见的时候,它会经历以下状态
- onPause()
onStop() - 当这个fragment被销毁了,它会经历以下状态
- onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()