一般的,我们写某某Activity时,通常要继承BaseActivity,这样就可以使用BaseActivity里面事先写好的功能方法,那么BaseActivity是什么梗呢?下面是我实际开发中所用的BaseActivity:
public abstract class BaseActivity extends Activity {
public Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutResID());
mContext = this;
initViews();
initEvents();
}
// 当前Activity对应的layout布局
protected abstract int layoutResID();
// 专门用来处理控件的findViewById()事件
protected abstract void initViews();
// 处理需要实现的功能,核心代码部分
protected abstract void initEvents();
}
这就是BaseActivity基础模型,在一个demo中如果MainActivity继承BaseActivity,那么一定是下面这样子的:
public class MainActivity extends BaseActivity {
@Override
protected int layoutResID() {
return R.layout.activity_main;
}
@Override
protected void initViews() {
}
@Override
protected void initEvents() {
}
}
介绍完BaseActivity后,下面写了一些功能方法吧,这些方法我在实际开发中都用过,挺好用的,拿出来和大家分享分享:
/**
* 跳转到指定的Activity
*
* @param cls 指定页面
*/
public void startActivity(Class<?> cls) {
startActivity(new Intent(mContext, cls));
}
/**
* 跳转到指定的Activity,并传递一个参数
*
* @param cls 指定页面
* @param name 自己定义的一个key,在接收时一定要和定义的名字一模一样
* @param value name对应的值,一般来说value和name是一样(可以防止出错),
* 而且不一定非要是String类型,也可以为boolean、int、long、double类型,
* 但一定要注意在接收时注意类型的转换
*/
public void startActivity(Class<?> cls, String name, String value) {
Intent intent = new Intent(mContext, cls);
intent.putExtra(name, value);
startActivity(intent);
}
/**
* 跳转到指定的Activity,并发送请求值
*
* @param cls 指定页面
* @param requestCode 请求值
*/
protected void startActivityForResult(Class<?> cls, int requestCode) {
startActivityForResult(new Intent(mContext, cls), requestCode);
}
/**
* 拨号
*
* @param phone 号码
*/
public void dial(String phone) {
// 判断号码是否为null或者为空
if (phone != null && !phone.equals("")) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone)));
}
}
/**
* toast,传String类型
*
* @param text 自己手写
*/
public void toast(String text) {
Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show();
}
/**
* toast,传int类型
*
* @param resId 事先写好的,放在strings.xml文件中
*/
public void toast(int resId) {
Toast.makeText(mContext, resId, Toast.LENGTH_SHORT).show();
}
/**
* 设置TextView的内容,使用该方法可让全局声明对象,findViewById以及setText三步操作变成一步完成
*
* @param id TextView控件的id
* @param text TextView的内容
*/
public void setText(int id, String text) {
((TextView) findViewById(id)).setText(text);
}
/**
* 展示图片,使用该方法可让全局声明对象,findViewById以及displayImage三步操作变成一步完成
*
* @param uri 图片地址
* @param id 图片控件的id
*/
public void displayImage(String uri, int id) {
// 这里用的是ImageLoader,除此之外,Picasso、Glide、Fresco也有对应显示图片方法
ImageLoader.getInstance().displayImage(uri, (ImageView) findViewById(id));
}
/**
* 关闭当前Activity,如果Activity的布局文件中的某一控件的onClick属性定义为finish,
* 那么app运行时点击该控件时会关闭当前页面,通常用于返回按钮点击
*
* @param view
*/
public void finish(View view) {
finish();
}
/**
* 判断TextView的内容是否为空,同样适用于EditText(判断是否输入)和Button
*
* @param textView TextView对象
* @return
*/
public boolean isEmpty(TextView textView) {
return textView.getText().toString().trim().length() == 0;
}
/**
* 获取TextView的内容,同样适用于EditText和Button
*
* @param textView TextView对象
* @return
*/
public String getText(TextView textView) {
if (textView != null && !isEmpty(textView)) {
return textView.getText().toString().trim();
} else {
return "";
}
}
// 复制文字到剪贴板
public void copyText2Clipboard(String text) {
if (text != null && !text.trim().equals("")) {
((ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE)).setText(text.trim());
toast("已复制到剪贴板");
} else {
toast("复制的内容不能为空");
}
}
// 设置EditText的焦点,把光标放置在EditText的后面,让其看起来无违和感
public void setCursor2RightOfEditText(EditText editText) {
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();
editText.setSelection(editText.getText().toString().trim().length());
}
暂时就这么多,后期还会继续补上,to be continue~~