源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-01-30 11:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:仿饿了吗点餐界面ListView联动的实现
在上篇文章给大家介绍了[url=http://www.1sucai.cn/article/93544.htm]仿饿了吗点餐界面两个ListView联动效果[/url] 主要实现了2个ListView怎样实现互相关联,正好上篇博客review了ListView控件常规使用,因此本篇博客主要对大神的那篇博客的实现进行代码层的剖析。 [b]一方面,方便自己,在以后的代码实现上加以参考。[/b]另一方面,供刚入门的Android菜鸟们共同学习。 [b]二、最终的效果图 [/b] [img]http://files.jb51.net/file_images/article/201609/2016092611592412.png[/img] 如上图效果图为仿饿了么点餐界面的ListView级联 [b]三、实现ListView级联的困难点 [/b] 为了好做区分,在本文中左侧的ListView称之为MenuListView,右侧的ListView称之为ItemListView。 1.两个ListView在整个Activity中的Layout布局问题 2.手动点击MenuListView的item,ItemListView怎么触发与之关联显示 如当点击MenuListView中的“新品套餐”,右侧ItemListView的getView如何显示新品套餐的内容。 3.手动滑动ItemListView时,MenuListView怎么关联到当前点击项 如当手动滑动ItemListView为“饮料类”时,左侧的MenuListView的当前点击Item显示为饮料类,即背景色为白色。 [b]四、代码实现[/b] [b]1.ListView的布局问题[/b] 看到这个截图的时候,第一想到的是用权重的显示,即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"
>
<ListView
android:id="@+id/lv_menu"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_width="wrap_content" />
<ListView
android:id="@+id/lv_item"
android:layout_height="match_parent"
android:layout_weight="2"
android:layout_width="wrap_content" />
</LinearLayout>
则效果图如下: [img]http://files.jb51.net/file_images/article/201609/2016092611592415.png[/img] 第二次尝试,将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<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;
@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联动的实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部