- 设计思路
- 设计好底部导航与内容页面的布局文件.
- 创建java Bean类BottomTabBean存储底部导航的tab
- 创建frament的派生类BaseItemContainer实现内容页面容器.
- 使用简单工厂模式实现tab与内容页面的映射生成LinkedHashMap<BottomTabBean, ItemContainer>.
- 创建BaseFragment继承自fragment,在这里可以完成对tab点击事件的监听以及内容页面的转换.
- 创建具体内容页面实现类IndexContainer继承自BaseItemContainer,完成对当前页面的事件处理.
- 继续创建具体内容页面...
- 创建具体实现类IndexFragment继承自BaseFragment,添加tab以及IndexContainer实例,
-
具体实现demo:
- 设计布局文件:
这里delegate_bottom_container用作内容页面的布局,delegate_bottom_bar即底部导航栏布局
- 创建javaBean类存储底部导航tab
- 创建frament的派生类实现内容页面容器.
这里的PocketDelegate是一个抽象的fragment类,实现View.OnKeyListener接口可实现对物理按键的监听,从而实现快速双击退出app的功能.
- 使用简单工厂模式实现tab与内容页面的映射生成LinkedHashMap<BottomTabBean, BottomItemDelegate>.
使用LinkedHashMap<>可以形成有序的键值对.
- 创建BaseFragment继承自fragment,在这里可以完成对tab点击事件的监听以及内容页面的转换.
- onCreate()方法中初始化页面,并将在子类实现的setItems()中返回的LinkedHashMap<>存储到ITEMS中,再遍历map,将BottomTabBean和BottomItemDelegate分别对应取出存储到TAB_BEANS和ITEM_DELEGATE列表中.
- onBindView()方法是父类的自定义方法,用于绑定控件,可以在onCreate()中完成.
- 对于fragment,推荐github的开源项目fragmentation https://github.com/YoKeyword/Fragmentation
- 创建具体内容页面实现类HomeItemDelegate继承自BottomItemDelegate,完成对当前页面的事件处理.
- 重复步骤6,创建另外的fragment
- 创建具体实现类PocketBottomDelegate继承自BaseBottomDelegate,添加tab以及具体内容页面实例
- 实现抽象方法setItems()来绑定tab与内容页面的关系,并返回LinkedHashMap<>.
- 实现抽象方法setPressColor()来实现按下tab的颜色.
- 实现抽象方法setIndexDelegate()来实现默认加载页面.
- 最终效果
网友评论