android 基类BaseFragment的简单使用

目的: 当有多个Fragment使用时,提供一个抽象基类BaseFragment, 来封装一下方法,使其Fragment的使用简单化。

解决问题:

1: 使用getActivtiy() 为空的情况,
2: 简化了onCreateView, 只需要提供布局id就好了

像添加和移除fragment的情况,这里没有列出,后续。。。

package com.ttjjttjj.recyclerviewtest.fragment;

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

/**
 * Created by Administrator on 2016/5/31 0031.
 *
 *  基类fragment
 *
 *  @author tj
 *
 */
public abstract class BaseFragment extends Fragment {

    protected Activity mActivity;

    /**
     * 获得全局的,防止使用getActivity()为空
     * @param context
     */
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.mActivity = (Activity)context;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container
            , Bundle savedInstanceState) {

        View view = LayoutInflater.from(mActivity)
                .inflate(getLayoutId(), container, false);
        initView(view, savedInstanceState);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initData();
    }

    /**
     * 该抽象方法就是 onCreateView中需要的layoutID
     * @return
     */
    protected abstract int getLayoutId();

    /**
     * 该抽象方法就是 初始化view
     * @param view
     * @param savedInstanceState
     */
    protected abstract void initView(View view, Bundle savedInstanceState);

    /**
     * 执行数据的加载
     */
    protected abstract void initData();
}

如果有什么其他好的意见的,希望留言,一起学习,谢谢!

你可能感兴趣的:(android 基类BaseFragment的简单使用)