基类(带顶部标题的)
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;
}
}