美文网首页
StatusLayoutManager(状态布局切换)

StatusLayoutManager(状态布局切换)

作者: buhuiming | 来源:发表于2018-05-31 09:46 被阅读0次

以前的项目在常常遇见这样的场景,未登录显示<未登录页面>,无网络显示<网络异常页面>, 没有数据显示<无数据页面>等等,当场景多了,页面自然也多了,但是在每个layout文件中都 添加这些布局,或者通过include方式,始终都觉得太麻烦。

所以自然就用了这个管理类,以下介绍下用法。

Github地址


1.引用


    compile 'com.bhm.sdk.manager.library:StatusLayoutManager:1.0.4'

2.在BaseActivity或者BaseFragment中声名对象


  protected StatusLayoutManager layoutManager;

3.抽象方法对布局的引用进行初始化:

    if(setRootViewId() != 0) {

        rootView = LayoutInflater.from(this).inflate(setRootViewId(), null, false);

        setContentView(rootView);

    }
    if(setContainerViewId() > 0 && setContentViewId() > 0) {

        layoutManager = StatusLayoutManager.newBuilder(this)

                .rootView(rootView)//根布局

                .containerViewId(setContainerViewId())//父布局

                .contentViewId(setContentViewId())//内容布局

                .itemViewsId(getItemViewsId())//布局集合

                .OnViewClickListener(this)

                .build();

    }
    private LinkedHashMap<Integer, Object> getItemViewsId(){
        LinkedHashMap<Integer, Object> res = new LinkedHashMap<>();
        //参数1:layout的id;参数2:Tag,标识
        res.put(R.layout.layout_no_data, "no_data");
        res.put(R.layout.layout_no_net, "no_net");
        return res;
    }

    protected abstract int setRootViewId();

    protected abstract int setContentViewId();

    protected abstract int setContainerViewId();

其中getItemViewsId()方法,添加所需要用到的布局。

4.BaseActivity或者BaseFragment 实现接口OnViewClickListener,重写方法

  @Override
  public void onClick(View view) {

  }

5.在需要的场景切换布局:

   private final static int no_data = 0; 
   private final static int no_net = 1;

   //layoutManager.hideAllLayout();
   //layoutManager.showViewByPosition(no_data);deprecated
   //layoutManager.showViewByPosition(no_net);deprecated
     layoutManager.showViewByTag("no_net");

6.布局中控件的点击事件:

@Override
public void onClick(View view) {
    super.onClick(view);
    switch (view.getId()){
        case R.id.layout_no_net :
            Toast.makeText(this, "点击了屏幕", Toast.LENGTH_SHORT).show();
            break;
        case R.id.tv_no_data :
            Toast.makeText(this, "点击屏幕重试", Toast.LENGTH_SHORT).show();
            break;
        case R.id.btn_no_data :
            Toast.makeText(this, "点击刷新", Toast.LENGTH_SHORT).show();
            break;
        layoutManager.showContent();
    }
}

注意:

setRootViewId是根布局;
containerViewId是父布局,比较关键的是此父布局最好使用LinearLayout;
setContentViewId是内容布局,比如recycleView。
至此,布局管理类的使用到此,是不是觉得简单多了!若不明白,请参考demo代码。
如果出现布局空白,不显示指定的布局,可以修改或添加containerViewId对应的布局为LinearLayout。

有问题,请发email给我873247376@qq.com

相关文章

网友评论

      本文标题:StatusLayoutManager(状态布局切换)

      本文链接:https://www.haomeiwen.com/subject/vwgfsftx.html