Android fragment

fragment的生命周期


定义一个BaseFragment添加log来显示fragment的生命周期

<span style="font-size:10px;">package com.example.fragment;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class BaseFragment extends Fragment{
	
	public static final String TAG = "BaseFragment";
	
	@Override
	public void onActivityCreated(@Nullable Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		Log.i(getSimpleTag(), "onActivityCreated");
	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Log.i(getSimpleTag(), "onActivityResult");
	}

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		Log.i(getSimpleTag(), "onAttach");
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.i(getSimpleTag(), "onCreate");
	}

	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		Log.i(getSimpleTag(), "onCreateView");
		return super.onCreateView(inflater, container, savedInstanceState);
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.i(getSimpleTag(), "onDestroy");
	}

	@Override
	public void onDestroyView() {
		super.onDestroyView();
		Log.i(getSimpleTag(), "onDestroyView");
	}

	@Override
	public void onDetach() {
		super.onDetach();
		Log.i(getSimpleTag(), "onDetach");
	}

	@Override
	public void onResume() {
		super.onResume();
		Log.i(getSimpleTag(), "onResume");
	}

	@Override
	public void onStart() {
		super.onStart();
		Log.i(getSimpleTag(), "onStart");
	}

	@Override
	public void onStop() {
		super.onStop();
		Log.i(getSimpleTag(), "onStop");
	}

	@Override
	public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
		super.onViewCreated(view, savedInstanceState);
		Log.i(getSimpleTag(), "onViewCreated");
	}
	
	public String getSimpleTag() {
		return TAG;
	}

}
</span>

定义一个MyFragment继承自BaseFragment来显示内容

<span style="font-size:10px;">package com.example.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyFragment extends BaseFragment {
	
	private String mText;
	
	private String mSimpleTag;
	
	public MyFragment(String text) {
		mText = text;
		
		mSimpleTag = TAG + "  " + text;
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		super.onCreateView(inflater, container, savedInstanceState);
		TextView tv = new TextView(getActivity());
		tv.setText(mText);
		return tv;
	}
	
	
	@Override
	public String getSimpleTag() {
		return mSimpleTag;
	}

}
</span>

将一个fragment添加到activity中

<span style="font-size:10px;">FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
f = new MyFragment(TAG_BOTTOM_A);
			ft.add(R.id.fragment_bottom_layout, f, TAG_BOTTOM_A);
ft.commit();</span>
将一个fragment添加到backstack中,按返回键时会将此fragment移出栈

<span style="font-size:10px;">ft.addToBackStack(null);</span>
当使用replace方法添加fragment时,相当于使用了add  和remove方法,在此fragment前面添加的fragment不会显示,而使用show方法,不会造成这种现象。

<span style="font-size:10px;">FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
		if (!f.isAdded()) {
			ft.add(id, f, tag);
			if (backStack) {
				ft.addToBackStack(null);
			}
		}
		ft.show(f);
		ft.commit();</span>


Fragment家族常用的API

Fragment常用的三个类:

android.app.Fragment 主要用于定义Fragment

android.app.FragmentManager 主要用于在Activity中操作Fragment

android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~

a、获取FragmentManage的方式:

getFragmentManager() // v4中,getSupportFragmentManager

b、主要的操作都是FragmentTransaction的方法

FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务

transaction.add() 

往Activity中添加一个Fragment

transaction.remove()

从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。

transaction.replace()

使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~

transaction.hide()

隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

transaction.show()

显示之前隐藏的Fragment

detach()

会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。

attach()

重建view视图,附加到UI上并显示。

transatcion.commit()//提交一个事务

注意:常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。

上述,基本是操作Fragment的所有的方式了,在一个事务开启到提交可以进行多个的添加、移除、替换等操作。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值