Fragment

一.什么是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;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值