Fragment优化取决于对生命周期的理解,以及利用Fragment的第二条生命周期。这种优化也不是绝对的,因为这样的优化将会使用内存来保存Fragment的某些状态,大致分为三点
案例
fragment文件片段
package com.hzj163.myfragmentcallback;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.ArrayList;
//利用生命周期第二条路优化
//1:集合优化
//2:适配器优化
//3:布局优化
//这种优化只适用于addToBackStack()方案的第二条生命周期路线
public class F3 extends Fragment {
//数据集合【可以在onAttach周期中实例化,达到每次replace碎片的时候只执行一次】
ArrayList<String> datas;
//适配器【可以在onAttach周期中实例化,达到每次replace碎片的时候只执行一次】
ArrayAdapter<String> arrayAdapter;
//碎片布局【需要在onCreateView周期中实例化,并且判断是否为null达到每次replace碎片的时候只执行一次】
View view;
//下拉框
Spinner s1;
//该周期在第二条路的情况下只会执行一次
@Override
public void onAttach(Context context) {
super.onAttach(context);
//实例化数据集合
datas = new ArrayList();
datas.add("吃饭");
datas.add("睡觉");
datas.add("上网");
datas.add("LOL");
//实例化适配器
arrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_item, datas);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//view实例化加优化
if (view == null) {
//获取布局对象View
view = inflater.inflate(R.layout.fragment_f3, container, false);
//实例化该布局组件
s1 = (Spinner) view.findViewById(R.id.s1);
//给其组件设置适配器
s1.setAdapter(arrayAdapter);
}
return view;
}
}