基类(带顶部标题的)

2017-04-26  本文已影响0人  谜之龙

Activity的基类
代码中我写:可以没有的 ,代表上面的红框,一般不需要,也可不写,写上也没关系
把其对应的布局设置为空白;

![0YEDW1A{WNK7({CO5@)2]1O.png](https://img.haomeiwen.com/i5710864/1e50905184f70917.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

public abstract class BaseActivity extends AppCompatActivity {
/**
 * ActionBar上的标题
 */
private TextView mTitle;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    init();
    super.setContentView(R.layout.layout_root);
    setContentView(getContentView()); //当没有是()里为getLayoutId
    initActionBar(isShowActionBar());
    initView();
    initData();
    setListaner();
}
//***************可以没有***************************
/**
 * 初始化Actionbar
 *
 * @param showActionBar :是否显示ActionBar
 */
private void initActionBar(boolean showActionBar) {
    RelativeLayout mActionBar = getViewById(R.id.relay_root_actionbar);
    if (showActionBar) {
        mTitle = getViewById(R.id.tv_root_title);
        ImageView image = getViewById(R.id.img_root_title);
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();//返回上一界面
            }
        });
    } else {//不显示
        mActionBar.setVisibility(View.GONE);
    }

}

//***************可以没有***************************
/**
 * 是否显示ActionBar
 *
 * @return true:表示显示
 */
protected abstract boolean isShowActionBar();
//***************可以也没有***************************
private View getContentView() {
    LinearLayout mRoot = getViewById(R.id.lin_root);
    //将子类的布局解析成View
    View subView = LayoutInflater.from(this).inflate(getLayoutId(), null);
    //设置大小
    subView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    mRoot.addView(subView);
    return mRoot;
}

protected void init() {

}

/**
 * 设置监听
 */
protected void setListaner() {

}

/**
 * 初始化数据
 */
protected abstract void initData();

/**
 * 初始化视图
 */
protected abstract void initView();

/**
 * 设置布局ID
 *
 * @return
 */
protected abstract int getLayoutId();

/**
 * 以Toast的方式显示文本信息
 *
 * @param text
 */
protected void showToast(String text) {
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}

/**
 * 启动一个activty
 *
 * @param cls
 */
protected void openActivity(Class<? extends BaseActivity> cls) {
    startActivity(new Intent(this, cls));
}

/**
 * 启动activity
 *
 * @param cls
 * @param isFinish :是否关闭当前的Activity
 */
protected void openActivity(Class<? extends BaseActivity> cls, boolean isFinish) {
    startActivity(new Intent(this, cls));
    if (isFinish) finish();
}

/**
 * 通过ViewID找View
 *
 * @param viewId
 * @param <T>
 * @return
 */
protected <T extends View> T getViewById(@IdRes int viewId) {
    return (T) findViewById(viewId);
}
//***************可以没有***************************
/**
 * 设置标题
 *
 * @param text
 */
protected void setTitle(String text) {
    mTitle.setText(text);
}
}

新建个App类,用于承接上下文的(记住APP这个类必须要在清单文件中注册)

记住APP这个类必须要在清单文件中注册
public class App extends Application{
public static App appContext;

@Override
public void onCreate() {
    super.onCreate();
    appContext = this;
}

}

上一篇下一篇

猜你喜欢

热点阅读