仿饿了吗点餐界面ListView联动的实现

仿饿了吗点餐界面ListView联动的实现,第1张

概述在上篇文章给大家介绍了仿饿了吗点餐界面两个ListView联动效果主要实现了2个ListView怎样实现互相关联,正好上篇博客review了ListView控件常规使用,因此本篇博客主要对大神的那篇博客的实现进行代码层的剖析。

在上篇文章给大家介绍了仿饿了吗点餐界面两个ListView联动效果

主要实现了2个ListVIEw怎样实现互相关联,正好上篇博客revIEw了ListVIEw控件常规使用,因此本篇博客主要对大神的那篇博客的实现进行代码层的剖析。

一方面,方便自己,在以后的代码实现上加以参考。另一方面,供刚入门的AndroID菜鸟们共同学习。

二、最终的效果图

如上图效果图为仿饿了么点餐界面的ListVIEw级联

三、实现ListVIEw级联的困难点

为了好做区分,在本文中左侧的ListVIEw称之为MenuListVIEw,右侧的ListVIEw称之为ItemListVIEw。

1.两个ListVIEw在整个Activity中的Layout布局问题

2.手动点击MenuListVIEw的item,ItemListVIEw怎么触发与之关联显示

如当点击MenuListVIEw中的“新品套餐”,右侧ItemListVIEw的getVIEw如何显示新品套餐的内容。

3.手动滑动ItemListVIEw时,MenuListVIEw怎么关联到当前点击项

如当手动滑动ItemListVIEw为“饮料类”时,左侧的MenuListVIEw的当前点击Item显示为饮料类,即背景色为白色。

四、代码实现

1.ListVIEw的布局问题

看到这个截图的时候,第一想到的是用权重的显示,即AndroID:layout_weight

第一次尝试

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools"androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:orIEntation="horizontal"><ListVIEwandroID:ID="@+ID/lv_menu"androID:layout_weight="1"androID:layout_height="match_parent"androID:layout_wIDth="wrap_content" /><ListVIEwandroID:ID="@+ID/lv_item"androID:layout_height="match_parent"androID:layout_weight="2"androID:layout_wIDth="wrap_content" /></linearLayout>

则效果图如下:

第二次尝试,将androID:layout_wIDth="wrap_content"替换为androID:layout_wIDth="0dp"

则可以按需要显示。

2.手动点击MenuListVIEw的item,ItemListVIEw怎么触发与之关联显示

MenuListVIEw和ItemListVIEw的关联显示主要是通过ListVIEw自带的函数setSelection()来关联的

比如说,当MenuListVIEw显示第i项时候,则ItemListVIEw根据i值关联到i项的第一个值,然后设置他为当前的setSelection.

代码中的实现如下:

对MenuListVIEw的item进行监听

mListMenu.setonItemClickListener(new ListVIEw.OnItemClickListener(){@OverrIDepublic voID onItemClick(AdapterVIEw<?> adapterVIEw,VIEw vIEw,int i,long l) {//设置当前点击项为i项mMenuAdapter.setSelectItem(i);mMenuAdapter.notifyDataSetInvalIDated();////设置ItemListVIEw的点击项为i项的第一个itemmListItem.setSelection(mTitleList.get(i));}});

而i项的第一个item的获取则是通过如下代码来实现的

mTitleList = new ArrayList<Integer>();//遍历所有item.size(),然后将第一个Title不同的项对应的值保存起来,则关联到每一个item对应到size中的值for (int i=0;i<mfoodDatas.size();i++){  if (i==0){  mTitleList.add(i);}else if(!TextUtils.equals(mfoodDatas.get(i).getTitle(),mfoodDatas.get(i-1).getTitle())){mTitleList.add(i);}}

3.手动滑动ItemListVIEw时,MenuListVIEw怎么关联到当前点击项

mListItem.setonScrollListener(new AbsListVIEw.OnScrollListener() {private int scrollState;@OverrIDepublic voID onScrollStateChanged(AbsListVIEw absListVIEw,int i) {this.scrollState = i;}@OverrIDepublic voID onScroll(AbsListVIEw absListVIEw,int firstVisibleItem,int visibleItemCount,int totalitemCount) {if(scrollState== AbsListVIEw.OnScrollListener.SCRolL_STATE_IDLE){return;}//判断当前的item是否是vIEw中第一个可见的itemint current = mTitleList.indexOf(firstVisibleItem);if(current!=currentItem && current>0){currentItem=current;//若不是的话,将menuListVIEw的item设置currentItem,来与itemListVIEw关联mMenuAdapter.setSelectItem(currentItem);mMenuAdapter.notifyDataSetInvalIDated();}}});

以上所述是小编给大家介绍的仿饿了吗点餐界面ListVIEw联动的实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的仿饿了吗点餐界面ListView联动的实现全部内容,希望文章能够帮你解决仿饿了吗点餐界面ListView联动的实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存