1、Fragment的几种状态
1.运行状态 活动状态 当Fragment位于前台,用户可见,可以获得焦点
2.暂停状态:依然可见,但不能获取焦点
3.停止状态:不可见,失去焦点
4.销毁状态:所在的activity被结束。Fragment被完全删除
2、生命周期的过程演示
①第一次进入界面:
②点击按钮:弹出对话框风格 Activity
③关闭对话框时:
④按下:
⑤再次进入:
⑥按下:
⑦再进入:
⑧按下:
3、上面操作的分析:
1.运行状态 进入界面
2.暂停状态:弹出activity的对话框这样操作
3.停止状态 按下的时候停止状态
4.销毁状态:按下
4、下面是案列说明,请仔细阅读:
package com.example.fragment.fragment;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.fragment.DialogActivity;
import com.example.fragment.R;
/**
* Fragment的生命周期
* @author admin
*
*/
public class MyFragment1 extends Fragment{
private static final String TAG="MyFragment1";
//被依附的Activity对象
private Activity activity;
/**
* 当该Fragment被添加到Activity时,被回调,该方法只会被调用一次。
*/
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
this.activity=activity;
Log.v(TAG, "-----onAttach-----");
}
/**
* 当fragment创建时被回调,该方法只会被调用一次
*/
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.v(TAG, "-----onCreate-----");
}
/**
* 每次创建,绘制该fragment的view组件时回调此方法,fragment将会显示该方法返回的view组件
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v(TAG, "-----onCreateView-----");
View view=inflater.inflate(R.layout.fragment_list, container, false);
TextView tv=(TextView) view.findViewById(R.id.tv_sy);
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*Intent intent=new Intent(activity, DialogActivity.class);
startActivity(intent);*/
//changeItem();
changeFragment();
}
private void changeItem() {
//1、首先获取FragmentManager对象
FragmentManager manager = getActivity().getSupportFragmentManager();
//2、根据FragmentManager对象的findFragmentById方法来获取指定的fragment
Fragment fragment = manager.findFragmentById(R.id.fragment2);
//3、获取Fragment中的布局文件对象
View view = fragment.getView();
//4、获取View对象中的任何控件
LinearLayout layout = (LinearLayout) view.findViewById(R.id.ll_item);
//5、改变背景颜色值
layout.setBackgroundColor(Color.BLUE);
}
private void changeFragment() {
//1、首先获取FragmentManager对象
FragmentManager manager = getActivity().getSupportFragmentManager();
//2、获取Fragment的事务 代表:Activity对Fragment执行的多个改变的操作
FragmentTransaction transaction = manager.beginTransaction();
//添加、替换、删除Fragment,这时需要Fragment Transaction,布局文件动态
//R.id.container
//执行替换
transaction.replace(R.id.container, new MyFragment3());
//3、提交
transaction.commit();
}
});
return view;
}
/**
* 当fragment所在的activity被启动完成后回调该方法
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Log.v(TAG, "-----onActivityCreated-----");
}
/**
* 启动fragment时被回调
*/
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.v(TAG, "-----onStart-----");
}
/**
* 恢复fragment时被回调,onstart方法后一定会执行该方法
*/
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.v(TAG, "-----onResume-----");
}
/**
* 暂停时被回调
*/
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.v(TAG, "-----onPause-----");
}
/**
* 停止时被回调
*/
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v(TAG, "-----onStop-----");
}
/**
* 销毁该fargment所包含的view组件时被调用
*/
@Override
public void onDestroyView() {
// TODO Auto-generated method stub
super.onDestroyView();
Log.v(TAG, "-----onDestroyView-----");
}
/**
* 销毁该fragment时被回调,该方法只会被回调一次
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v(TAG, "-----onDestroy-----");
}
/**
* 将该fragment从activity中被删除、替换完成时回调该方法,onDestroy方法后一定会回调该方法,该方法只能被调用一次
*/
@Override
public void onDetach() {
// TODO Auto-generated method stub
super.onDetach();
Log.v(TAG, "-----onDetach-----");
}
}
5、结果显示