!个人探索整理
当我们遇到需要用一个按钮控制多种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。当然以上只是思路,具体细节还要看业务需求
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦