为了账号安全,请及时绑定邮箱和手机立即绑定

仿曾经的掌阅书架多种布局切换展示实现方案探索

标签:
Android

!个人探索整理

当我们遇到需要用一个按钮控制多种View切换,怎么办?

我们可以这样想一下:

问题1:是否可以用变量记录当前展示的是哪个View,通过对变量的操作完成View的切换呢?

问题2:控制类不希望知道子View业务细节,是否可以用一个对象来代表这些子View,通过操作该对象实现对子View的操作。

按上面俩个问题扩展一下解决思路:

1.分别指定子View对应的记录类型

2.提供全局变量记录最终显示的子View类型,同时可以方便外部来操作

3.提供局部变量与全局变量比对,是否需要切换子View,二者一致,说明没有切换,不需要任何UI操作。反之,需要切换。

其中第三点会稍微有点绕,想明白就好了

ps:用变量控制的好处就是在实际切换时只需改变全局变量的值就可以,不需要操作UI,需要更新UI时再执行变量的匹配、UI的切换

我们使用Interface来接管子View,在我们的实际控制类中只操作这个接口,来完成一些子View需要外部的一些资源,具体业务实现则由子View完成

一旦掌握这个思路,以后再实现类似的切换逻辑就简单了

变量定义:

[代码]java代码:

?

currentViewMode;//控制类局部变量,当前View类型
viewInterface;//代表子View接口对象
VIEW_MODE_1=0,VIEW_MODE_2;/ 子View 
CURRENT_VIEW_MODE=VIEW_MODE_1 ;//全局变量,初始化指定一个子View

初始化逻辑:

[代码]java代码:

?

CURRENT_VIEW_MODE =SharedPreferences.getInt("view_mode",0)
      currentViewMode = CURRENT_VIEW_MODE;
 
 if (CURRENT_VIEW_MODE == VIEW_MODE_1) {
        
          viewInterface = new View1(context);
 
      } else {   
          viewInterface = new View2(context);
      }

切换更改变量赋值逻辑

[代码]java代码:

?

if ( CURRENT_VIEW_MODE ==VIEW_MODE_1)
             CURRENT_VIEW_MODE =VIEW_MODE_2;
                               
       else
            CURRENT_VIEW_MODE =VIEW_MODE_1;
 
    //更新UI;

切换更新UI:

[代码]java代码:

?

if (CURRENT_VIEW == currentView)
        return;
     
    currentView = CURRENT_VIEW;
mViewInterface.releaseRes();//释放子类的一些资源,养成好习惯   
 
    if (CURRENT_VIEW == VIEW_MODE_1) {
        
        viewInterface = new View1(context);//重新赋值          
    } else {
      
        viewInterface = new View2(context);
    }

此类问题核心点就是在如何区分是否需要更新Ui。当然以上只是思路,具体细节还要看业务需求

原文链接:http://www.apkbus.com/blog-35555-60421.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消