Android----Fragment

简介:Fragment是一个类不能单独存在只能依附在Activity上才能运行,属于Activity的一部分不能单独运行。每个fragment拥有自己的生命周期,可以被不同的activity复用。可以把Fragment当成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>
FristFragment布局
 
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-6的效果,bt3,bt4用了回调方法
   
  
  
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、付费专栏及课程。

余额充值