Android Fragment

Fragment优化

  Fragment优化取决于对生命周期的理解,以及利用Fragment的第二条生命周期。这种优化也不是绝对的,因为这样的优化将会使用内存来保存Fragment的某些状态,大致分为三点

  • 碎片View的内存保存
  • 集合数据的内存保存
  • 适配器的内存保存

案例

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;
    }
}