Android Activity基类封装
2016-08-15 23:28
405 查看
编写一个Activity基类,对Activity进行封装,方便使用,参考知乎上一个帖子,可以点击这里查看
1、新建抽象类ParentActivity继承AppCompatActivity,并实现OnClickListener接口
public abstract class ParentActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // TODO } @Override public void onClick(View v) { // TODO } }
2、编写几个子类必须实现的抽象方法
/** * 设置ContentView * @return R.layout.xxx */ protected abstract int getLayoutId(); /** * 初始化View */ protected abstract void initView(); /** * add Listener */ protected abstract void setListener(); /** * 初始化数据 */ protected abstract void initData(); /** * view点击 * @param v */ public abstract void widgetClick(View v);
3、调用,顺序基本是设置布局,加载布局,事件监听,初始化数据,点击时加入了防止快速点击
public abstract class ParentActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId()); initView(); setListener(); initData(); } @Override public void onClick(View v) { if (fastClick()) widgetClick(v); } private long lastClick = 0; private boolean fastClick() { if (System.currentTimeMillis() - lastClick <= 1000) { return false; } lastClick = System.currentTimeMillis(); return true; } }
4、添加title,这里没在基类写死,子类可以直接使用这个,也可以重写父类方法,写成是这里使用了Toolbar,可以自己定义
// 通用title protected void $setToolBar() { Toolbar toolbar = $findViewById(R.id.toolbar); toolbar.setTitle(""); setSupportActionBar(toolbar); toolbar.setNavigationIcon(R.drawable.back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); }
5、加入一些使用多,通用功能
// findViewById public <T extends View> T $findViewById(int resId) { return (T) findViewById(resId); } // Toast protected void $toast(CharSequence msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } // Toast protected void $toast(int resId) { Toast.makeText(this, resId, Toast.LENGTH_SHORT).show(); } protected boolean isDebug = true; // Log protected void $Log(String msg) { if (isDebug) { Log.d(this.getClass().getName(), msg); } }
6、startActivity通用样式编写
// startActivity protected void $startActivity(Class<?> cls, Bundle bundle) { Intent intent = new Intent(this, cls); if (bundle != null) { intent.putExtras(bundle); } startActivity(intent); } // startActivity protected void $startActivity(Class<?> cls) { $startActivity(cls, null); } // startActivityForResult protected void $startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) { Intent intent = new Intent(this, cls); if (bundle != null) { intent.putExtras(bundle); } startActivityForResult(intent, requestCode); } // startActivityForResult protected void $startActivityForResult(Class<?> cls, int requestCode) { $startActivityForResult(cls, null, requestCode); } // getIntent protected Bundle $getIntentExtra() { Intent intent = getIntent(); Bundle bundle = null; if (null != intent) bundle = intent.getExtras(); return bundle; }
上面简单的进行了封装,有许多不足之处,参考一下,自己根据实际情况再封装一下。
源码以及Demo地址:https://github.com/YBill/EncapsulateActivity相关文章推荐
- Android 基类BaseActivity的封装
- Android设计模式之Activity基类封装
- Android当中的MVP模式(六)View 层 Activity 的基类--- BaseMvpActivity 的封装
- Android 基类BaseActivity的封装
- Android 6.0权限判断封装的基类 实用在activity和fragment中
- Android 基类BaseActivity的封装
- android产品研发(三)-->基类Activity
- Android Activity整体管理和关闭工具类封装
- 关于Android中两个Activity之间为什么采用Intent封装意图的简介
- android 在基类activity中注册BroadcastReceiver,子activity类实现响应
- Android基类Activity的设计
- Android App框架设计之编写基类BaseActivity
- 【Android】切换Activity时使用Bundle封装Map对象
- Android为什么要创建Activity基类以及Activity基类中一般有哪些方法
- Android Activity整体管理和关闭工具类封装
- Android 自定义Activity基类与TitleBar
- Android中基类BaseActivity的设计与实现
- Android FragmentActivity Intent 跳转封装
- 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法
- Android实用方法—Activity的封装以及美化