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

本文详细介绍了如何在Android中模仿饿了么点餐界面,实现两个ListView的联动效果。通过分析布局、点击事件及滚动监听,展示了如何在用户交互时同步两个ListView的状态。

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

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

二、最终的效果图

b55ae24056b2a73906a09c39c3835417.png

如上图效果图为仿饿了么点餐界面的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

第一次尝试

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

>

android:id="@+id/lv_menu"

android:layout_weight="1"

android:layout_height="match_parent"

android:layout_width="wrap_content" />

android:id="@+id/lv_item"

android:layout_height="match_parent"

android:layout_weight="2"

android:layout_width="wrap_content" />

则效果图如下:

306a8935b61b65c825abd7728620ef73.png

第二次尝试,将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(){

@Override

public void onItemClick(AdapterView> adapterView, View view, int i, long l) {

//设置当前点击项为i项

mMenuAdapter.setSelectItem(i);

mMenuAdapter.notifyDataSetInvalidated();//

//设置ItemListView的点击项为i项的第一个item

mListItem.setSelection(mTitleList.get(i));

}

});

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

mTitleList = new ArrayList();

//遍历所有item.size(),然后将第一个title不同的项对应的值保存起来,则关联到每一个item对应到size中的值

for (int i=0;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;

@Override

public void onScrollStateChanged(AbsListView absListView, int i) {

this.scrollState = i;

}

@Override

public void onScroll(AbsListView absListView,

int firstVisibleItem,

int visibleItemCount,

int totalItemCount) {

if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){

return;

}

//判断当前的item是否是view中第一个可见的item

int current = mTitleList.indexOf(firstVisibleItem);

if(current!=currentItem && current>0){

currentItem=current;

//若不是的话,将menuListView的item设置currentItem,来与itemListView关联

mMenuAdapter.setSelectItem(currentItem);

mMenuAdapter.notifyDataSetInvalidated();

}

}

});

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值