Android 中UIBlock的使用
来源:互联网 发布:益玩网络 编辑:程序博客网 时间:2024/06/05 03:19
一,uiBlock:
轻型的ui模块。功能大致和fragment相同,但比较fragment相对轻量化。其所有生命周期和activity相同。本质上就是一个自定义View。代替 fragment 的轻量级解耦 UI 的类。
项目地址:tianzhijiexian/UIBlock
二, 引入方式:
在项目外层的 build.gradle 中添加插件地址和 JitPack 仓库:
buildscript { dependencies { classpath 'me.leolin:android-aspectj-plugin:1.0.7' }}allprojects { repositories { // ... maven { url "https://jitpack.io" } }}
目这里写代码片中添加依赖和插件:
compile 'com.github.tianzhijiexian:UiBlock:Latest release'apply plugin: 'me.leolin.gradle-android-aspectj'
1,准备工作
在项目中的 BaseActivity(如果没有请自行建立),让它实现UiBlockActivity接
在项目中的 BaseActivity(如果没有请自行建立),让它实现UiBlockActivity接口:
public class BaseActivity extends AppCompatActivity implements UiBlockActivity { private UiBlockManager mUiBlockManager; @Override public UiBlockManager getUiBlockManager() { if (mUiBlockManager == null) { mUiBlockManager = new UiBlockManager(this); } return mUiBlockManager; } @Override public UiBlockManager getInternalManager() { return mUiBlockManager; } // 下方均为 activity 的默认实现 @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); } @Override public void onStop() { super.onStop(); } @Override public void onRestart() { super.onRestart(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } @Override public void onBackPressed() { super.onBackPressed(); }}
在这里要写出 activity 默认的生命周期和getUiBlockManager()方法。写出默认的生命周期方法后就可以通过AspectJ来触发 UiBlock 的生命周期。
三,使用情形
简单划分 UI 逻辑 。
这里的 ui 界面可以明显看出是由上下两个部分组成的。如果下方 ui 区块的代码很复杂,那么就可以利用 UiBlock 把下半部分的逻辑独立出来,并且不用写额外的 xml 布局文件。
1.建立 UiBlock:
public class TextUiBlock extends UiBlock{ @Override public int getLayoutResId() { return R.layout.demo_uiblock; } TextView text; @Override protected void bindViews() { text = getView(R.id.tv); } @Override protected void setViews() { mTopTv.setText("Share"); }}
挂载到 Activity 上:
在 activity 中,通过getUiBlockManager().add(R.id.share_linearlayout, new TextUiBlock())把 UiBlock 绑定到 activity 上。
2. 复用 UI 区块
复用 UI 是很常见的需求,我的建议是:多复用 UI 组件,而不是复用整个 activity。因为如果 activity 被多次复用,一旦后期界面需求分化,就会造成维护难度。
UiBlock 可以用来做 ui 区块的复用:
1,建立一个要复用 layout 文件
2,建立对应的 UiBlock
3,通过include将 layout 文件放入 activity 的 xml 中
4,调用 UiBlockManager 的 add 方法进行挂载(id 就是 include 标签的 id)
<include android:id="@+id/uiblock_layout" layout="@layout/demo_uiblock" android:layout_width="match_parent" android:layout_height="100dp" />
3. 嵌套使用 UiBlock
之前豪哥遇到过这样的情况:activity 中套 fragment,这个 fragment 中又套了一个 fragment。UiBlock 可以很简单地解决这个问题。
主要方法:
1,建立两个 UiBlock
2,在 activity 中调用 UiBlockManager 的 add 方法挂载外层的 UiBlock
3,在外层的 UiBlock 中调用 UiBlockManager 的 add 方法挂载内层的 UiBlock。
详细文档:
转载:http://p.codekk.com/detail/Android/tianzhijiexian/UIBlock
- Android 中UIBlock的使用
- Android中ListActivity的使用
- Android 中LayoutInflater的使用
- Android中ExpandableListView的使用
- Android中Handler的使用
- android中ProgressBar的使用
- Android中ListView的使用
- android中ImageButton的使用
- Android中Spinner的使用
- Android中ContextMenu的使用
- Android中Preference的使用
- Android 中LayoutInflater的使用
- Android中webview的使用
- android中sqlite的使用
- Android中shape的使用
- android中Animation的使用!
- android中LayoutInflater的使用
- Android中CursorJoiner的使用
- TensorFlow,concat函数
- Android 使用反射调用Hide方法setShowSoftInputOnFocus
- webservice之jax-ws服务端及客户端实现
- 数据库SQL实战
- Codeforces Round #426 (Div. 2)-The Bakery(线段树+DP)
- Android 中UIBlock的使用
- Linux学习笔记(8)
- SpringMVC
- 数字游戏
- String,StringBuffer和StringBuilder
- Android多线程之HandlerThread
- DoKuKIWI Windows安装说明
- How to operate/manage resources to meet certain objectives?
- Oracle初识笔记(二)