直接拿来用,BaseActivity的常用功能的抽取

来源:互联网 发布:淘宝网购物女装衬衫 编辑:程序博客网 时间:2024/05/21 17:08

在实际项目的开发过程中,我们经常封装所有Activity,Fragment的基类,通常取名为BaseActivity,BaseFragment,这样方便我们统一管理Activity和Fragment

BaseActivity.java:

package com.cool.sleepgodlibrary.common;import android.app.Dialog;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.Button;import android.widget.ImageButton;import com.cool.sleepgodlibrary.ui.LoadingDialog;import com.cool.sleepgodlibrary.utils.ToastUtils;/** * Created by cool on 2017/3/17. */public abstract class BaseActivity extends FragmentActivity implements View.OnClickListener {    private Dialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏        super.onCreate(savedInstanceState);        setContentView(setLayoutResID());//设置布局文件        //为所有按钮设置点击事件        View rootView = findViewById(android.R.id.content);// android.R.id.content这个id可以获取到Activity的根View        //寻找按钮组件,并设置点击事件        findButtonAndSetOnClickListener(rootView);        initDialog();        setImmerse();        fillData();        initView();        initData();        initListeners();    }    /**     * 设置沉浸式状态栏     */    protected  void setImmerse(){}    private void initDialog() {        if (dialog == null) {            dialog = new LoadingDialog(this);        }    }    public void showProgress() {        dialog.show();    }    public void hidderProgress() {        dialog.dismiss();    }    /**     * 寻找按钮组件,并设置点击事件,子类如果需要响应按钮点击事件直接实现本类中的onClick(View v, int id)方法     *     * @param rootView     */    private void findButtonAndSetOnClickListener(View rootView) {        if (rootView instanceof ViewGroup) {            ViewGroup viewGroup = (ViewGroup) rootView;            for (int i = 0; i < viewGroup.getChildCount(); i++) {                View child = viewGroup.getChildAt(i);                if (child instanceof Button || child instanceof ImageButton) {                    child.setOnClickListener(this);                } else if (child instanceof ViewGroup) {                    findButtonAndSetOnClickListener(child);                }            }        }    }    /**     * 此方法的目的是子类使用此方法findViewById不再需要强转,注意:接受类型一定不要写错     *     * @param id     * @param <T>     * @return     */    public <T> T findView(int id) {        T view = (T) findViewById(id);        return view;    }    /**     * 初始化Listener,需要实现是覆盖     */    public void initListeners() {    }    /**     * 设置布局文件     *     * @return 布局文件ID     */    public abstract int setLayoutResID();    /**     * 初始化view,必须实现     */    public abstract void initView();    /**     * 填充数据     */    private void fillData() {    }    /**     * 初始化数据     */    public void initData() {    }    /**     * 打印吐司     *     * @param msg     */    public void showToast(String msg) {        ToastUtils.showToast(this,msg);    }    /**     * 子类实现此方法处理点击事件     *     * @param v     * @param id     */    public void onClick(View v, int id) {    }    @Override    public void onClick(View v) {        onClick(v, v.getId());    }}

BaseFragment.java

package com.cool.sleepgodlibrary.common;import android.app.Dialog;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 com.cool.sleepgodlibrary.ui.LoadingDialog;import com.cool.sleepgodlibrary.utils.ToastUtils;/** * Created by cool on 2017/3/17. */public abstract class BaseFragment extends Fragment implements View.OnClickListener {    public View mView;    public Context mContext;    private Dialog dialog;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        mContext = getActivity();        mView = inflater.inflate(setLayoutResID(), null);        initDialog();        fillData();        initView();        initListener();        initData();        return mView;    }    /**     * 设置布局文件     *     * @return 布局文件ID     */    public abstract int setLayoutResID();    protected abstract void initView();    /**     * 填充数据     */    private void fillData() {    }    public void initData() {    }    public void initListener() {    }    public <T> T findView(int id) {        T view = (T) mView.findViewById(id);        return view;    }    /**     * 在屏幕中央打印吐司     *     * @param msg     */    public void showToast(String msg) {        ToastUtils.showToast(mContext,msg);    }    /**     * 子类实现此方法处理点击事件     *     * @param v     * @param id     */    public void onClick(View v, int id) {    }    @Override    public void onClick(View v) {        onClick(v, v.getId());    }    private void initDialog() {        if (dialog == null) {            dialog = new LoadingDialog(mContext);        }    }    public void showProgress() {        dialog.show();    }    public void hidderProgress() {        dialog.dismiss();    }}


1 0