Android————Fragment(碎片)

简介:Fragment是一个类,不能单独存在只能依附在Activity上才能运行,属于Activity一个界面的一部分,不能单独运行。一个Activity的界面可以由完全不同的Fragment组成,Fragment有自己的生命周期和接收、处理用户的事件,因此不必要在一个Activity里面写一堆事件、控件的代码了。可以静态、动态的添加、替换、移除某个Fragment。

Fragment和Activity之间的通信(回掉方法):

1.在Fragment中声明一个接口
2.在A中实现在F中声明的接口
3.在F中声明一个接口的对象
4.在F的生命周期Onattach方法中判断当前A是否实现了此F中
  声明的接口。如果已实现,就把当前A装换成接口对象。
5.调用A中的实现的方法 =>(接口对象.方法名)

package com.edu.jereh.jreduch08;

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

import com.edu.jereh.jreduch08.fragment.FirstFragment;
import com.edu.jereh.jreduch08.fragment.LeftFragment;
import com.edu.jereh.jreduch08.fragment.SecondFragment;

public class Fragment1Activity extends AppCompatActivity implements LeftFragment.OnFragmentInteractionListener  //实现LeftFragment

    {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment1);
        getSupportActionBar().hide();
    }
    public void changeFragment(int which) {
        if(which==1){
            Fragment fragment1 = new FirstFragment();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fl,fragment1)
                    .commit();
        }else if(which==2){
            Fragment fragment2 = new SecondFragment();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fl, fragment2)
                    .commit();
        }
    }
}
activity_fragment1 布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"

    tools:context="com.edu.jereh.jreduch08.Fragment1Activity">

    <fragment
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:id="@+id/left_fragment"
        android:layout_below="@+id/top_fragment"
        android:name="com.edu.jereh.jreduch08.fragment.LeftFragment"/>

    <fragment
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/top_fragment"
        android:name="com.edu.jereh.jreduch08.fragment.TopFragment"/>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fl"
        android:layout_below="@+id/top_fragment"
        android:layout_toEndOf="@+id/left_fragment">

    </FrameLayout>
</RelativeLayout>
FirstFragment布局文件
SecondFragment布局文件
LeftFragment代码
package com.edu.jereh.jreduch08.fragment;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.edu.jereh.jreduch08.R;

/**
 * A simple {@link Fragment} subclass.
 */
public class LeftFragment extends Fragment  {
private  Fragment fragment1;
private  Fragment fragment2;
    private OnFragmentInteractionListener mListener;

    public LeftFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =inflater.inflate(R.layout.fragment_left, container, false);
        Button bt1 = (Button)view.findViewById(R.id.bt1);
        Button bt2 = (Button)view.findViewById(R.id.bt2);
        Button bt3 = (Button)view.findViewById(R.id.bt3);
        Button bt4 = (Button)view.findViewById(R.id.bt4);
        Button bt5 = (Button)view.findViewById(R.id.bt5);
        Button bt6 = (Button)view.findViewById(R.id.bt6);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fragment1 = new FirstFragment();
                Toast.makeText(getContext(),"点击了按钮1",Toast.LENGTH_SHORT).show();
                FragmentManager fm = getFragmentManager();
                FragmentTransaction fr = fm.beginTransaction();//事物 开始
                fr.replace(R.id.fl,fragment1);//执行
                fr.commit();//提交
            }
        });
        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fragment2 = new SecondFragment();
                Toast.makeText(getContext(),"点击了按钮2",Toast.LENGTH_SHORT).show();
                FragmentManager fm = getFragmentManager();
                FragmentTransaction fr = fm.beginTransaction();//事物 开始
                fr.replace(R.id.fl,fragment2);//执行
                fr.commit();//提交
            }
        });
        bt3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mListener.changeFragment(1);
            }
        });
        bt4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mListener.changeFragment(2);
            }
        });
        bt5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(fragment1!=null&&!fragment1.isHidden()){    //判断是否不隐藏
                    getFragmentManager().beginTransaction()
                            .hide(fragment1)
                            .commit();
                }
            }
        });
        bt6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(fragment1!=null&&fragment1.isHidden()) {    //判断是否隐藏
                    getFragmentManager().beginTransaction()
                            .show(fragment1)
                            .commit();
                }
            }
        });
        return view;
    }
    public interface OnFragmentInteractionListener{
        void changeFragment(int which);
    }
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {   //判断A是否实现了F里的接口
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

}
以下6副图以此为点击Button bt1-5后的效果,图三和图四便是用回调方法
  
 
  
Fragment的生命周期

 
 
方法名 说明 onAttach () Fragment被附加到Activity的时,调用此函数,在这个方法中可以获得宿主Activity。 onCreate () Fragment被创建的时,调用此函数。 onCreateView () Fragment的布局加载时,调用此函数。 onActivityCreated () 当宿主Activity启动完毕后,调用此函数。 onStart () 启动Fragment时,调用此函数。 onResume () Fragment恢复时,调用此函数。 onPause () Fragment暂停时,调用此函数。 onStop() Fragment停止时,调用此函数。 onDestroyView() 销毁Fragment中的View控件时,调用此函数。 onDestroy() 销毁Fragment时,调用此函数。 onDetach() Fragment从Activity脱离时,调用此函数 与Activity生命周期的对比

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值