学术论文网
基于Android的移动点餐类App的设计与实现
发布日期:2020-09-11 15:51:46

5.3  菜单展示页面

菜单展示页面要展示当前餐厅的菜单,因为要根据简略的菜系(或者是种类)进行分类展示,所以这里要用到自定义控件,不仅仅是重写方法那么简单的了。别人在这里阐述一下思路,如图5-3右边的是自定义的ExpandableListView,使用ExpandableListView的原因是展示菜品的使用要做以分类,而左边的是ListView用来作为右边菜单的导航。

首先右边的ExpandableListView要默认展开:

for (int i = 0; i < dataset.size(); i++) {

Expandablelistview.expandGroup(i);

}

其中dataset为ExpandableListView一级标题的数据源。

再就是自定义ExpandableListView需要添加的最重要的功能--固定每一个一级标题(当下滑或者是上滑的时候,如果有一级标题要从头部脱离屏幕在没有其他一级标题固定的情况下次一级标题要固定在头部,如果已经有一级标题在固定,就让上一个固定的一级标题滚出屏幕,固定当前的标题),这样用户不仅仅可以通过左边的ListView导航查看现在正在选择的菜品的种类,还可以在当前列表更直观的看到。

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

if (mScrollListener != null) {

mScrollListener.onScrollStateChanged(view, scrollState);

}

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

if (totalItemCount > 0) {

refreshHeader();

}

if (mScrollListener != null) {

mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount,

totalItemCount);

}

}

上面的代码为ExpandableListView的滑动监听,在滑动监听中通过判断一级标题的位置来动态的设计停留在头部的标题。如图5-3 页面设计流程图,为上下两段代码的直观体现。

图5-3 页面设计流程图

protected void refreshHeader() {

if (mHeaderView == null) {

return;

}

int firstVisiblePos = getFirstVisiblePosition();

int pos = firstVisiblePos + 1;

int firstVisibleGroupPos = getPackedPositionGroup(getExpandableListPosition(firstVisiblePos));

int group = getPackedPositionGroup(getExpandableListPosition(pos));

//对当前显示的标题进行判断

if (group == firstVisibleGroupPos + 1) {

View view = getChildAt(1);

if (view == null) {

return;

}

//如果要滑出屏幕就把它固定在屏幕上端

if (view.getTop() <= mHeaderHeight) {

int delta = mHeaderHeight - view.getTop();

mHeaderView.layout(0, -delta, mHeaderWidth, mHeaderHeight

- delta);

} else {

mHeaderView.layout(0, 0, mHeaderWidth, mHeaderHeight);

}

} else {

//正在显示在屏幕上端的标题

mHeaderView.layout(0, 0, mHeaderWidth, mHeaderHeight);

}

以下代码也是自定义控件中的代码,主要是更新标题的监听事件,根据监听事件可以改变左边ListView选中的Item。通过使用该控件时对该控件次监听事件的调用来完成两个控件联动的效果。

if (mHeaderUpdateListener != null) { 

}

上面的代码主要实现的功能就是把标题停留在头部,并且判断当头部有一个标题的时候移除原来的标题。两段代码配合实现要求的ExpandableListView。如图5-4菜单展示页面所示,上面的热销就是停留头部的标题。在这是自定义Expandable主要的功能。

Copyright © 2008-2020 学术论文网 版权所有 粤ICP备16093775号