一.什么是fragment?
Fragment也可以叫为“片段”,但我觉得“碎片”中文叫法有点生硬,还是保持叫Fragment比较好,它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,能接受自己的输入,并且可以在 Activity 运行时添加或删除Fragment(有点像在不同 Activity 中重复使用的“子 Activity”)。
简单来说,Fragment其实可以理解为一个具有自己生命周期的控件,只不过这个控件又有点特殊,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于Activity,能互相通信和托管。
二.用Fragment能解决什么样的问题?
1.Fragment可以实现activity的切换。
2.主要目的是为了给大屏幕(如平板电脑)上更加动态和灵活的UI设计提供支持。由于平板电脑的屏幕比手机的屏幕大很多,利用Fragment可以做到屏幕分辨率的兼容。
三.Fragme有两种加载方法分别是静态加载和动态加载.
1.静态加载:首先创建两个Fragment之后
布局页面须有Fragment控件需给它name和id
代码如下:
<?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"
android:orientation="vertical"
tools:context="com.example.administrator.myapplication.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="Hello World!"
android:textSize="50dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<fragment
android:id="@+id/one"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:name="com.example.administrator.myapplication.fragame.OneFragment"
/>
<fragment
android:id="@+id/two"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:name="com.example.administrator.myapplication.fragame.TwoFragment"
/>
</LinearLayout>
</LinearLayout>
这里写代码片
2.动态加载方法:
首先创建你所需要的Fragment,如天猫的一个男装和女装切换的页面,可以创建两个Fragment,再在创建两个按钮.
代码如下:
package com.example.administrator.myapplication;
import android.app.Fragment;
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;
import com.example.administrator.myapplication.framgame.ManFragment;
import com.example.administrator.myapplication.framgame.WomanFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button man;
Button woman;
private ManFragment manFragment;
private WomanFragment womanFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
man=findViewById(R.id.nan);
woman=findViewById(R.id.nv);
man.setOnClickListener( this);
woman.setOnClickListener( this);//设置点击事件
}
@Override
public void onClick(View view) {
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
switch (view.getId()){
case R.id.nan:
if (manFragment==null){
manFragment=new ManFragment();
} //优先检查,fragment是否存在,避免重叠
transaction.replace(R.id.fra,manFragment);
break;
case R.id.nv:
if (womanFragment==null){
womanFragment=new WomanFragment();
}
transaction.replace(R.id.fra,womanFragment);
break;
default:
break;
}
transaction.commit();
}
}
上面代码中提到Fragmen的添加,Fragment添加与FragmentManager与FragmentTransaction息息相关。add和replace都是FragmentTransaction的方法。除这两个方法,其中还有remove,hide和show方法。
FragmentManager与FragmentTransaction的获取:
FragmentManager frgmentManager = getFragmentManager() // v4中, getSupportFragmentManager
FragmentTransaction transaction = frgmentManager.benginTransatcion();
四.最后就是Viewpager+Fragment实现页卡滑动切换,我认为这也是最难的地方。
这里我模仿微信的页面给大家介绍一下:
布局文件activity_main.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.example.administrator.myapplication.Main2Activity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/down"
></android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/down"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_height="wrap_content">
<Button
android:id="@+id/contact"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:text="联系人"
/>
<Button
android:id="@+id/friend"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:text="朋友圈"
/>
<Button
android:id="@+id/news"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="50dp"
android:text="动态"
/>
</LinearLayout>
</RelativeLayout>
实现的效果图如下:
![这里写图片描述]
(http://img.blog.csdn.net/20180306162900427?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFsdXlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
之后创建三个Fragment分别对应图中的 联系人,朋友圈和动态,之后在Activity中代码为:
package com.example.administrator.myapplication;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.administrator.myapplication.adapter.MyPagerAdapter;
import com.example.administrator.myapplication.framgame.ContactFragment;
import com.example.administrator.myapplication.framgame.FriendFragment;
import com.example.administrator.myapplication.framgame.NewsFragment;
import java.util.ArrayList;
import java.util.List;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener{
private Button contact;
private Button friend;
private Button news;
private ViewPager viewPager;
private ContactFragment contactFragment;
private FriendFragment friendFragment;
private NewsFragment newsFragment;
private List<Fragment> fragmentList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
binds();
contactFragment=new ContactFragment();
friendFragment=new FriendFragment();
newsFragment=new NewsFragment();
contact.setOnClickListener(this);
friend.setOnClickListener(this);
news.setOnClickListener(this);
fragmentList.add(contactFragment);
fragmentList.add(friendFragment);
fragmentList.add(newsFragment);
MyPagerAdapter adapter=new MyPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(adapter);
}
private void binds() {
contact=findViewById(R.id.contact);
friend=findViewById(R.id.friend);
news=findViewById(R.id.news);
viewPager=findViewById(R.id.viewpager);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.contact:
viewPager.setCurrentItem(0);
break;
case R.id.friend:
viewPager.setCurrentItem(1);
break;
case R.id.news:
viewPager.setCurrentItem(2);
break;
}
}
}