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