仿饿了点餐界面2个ListView联动

如图是效果图

是仿饿了的点餐界面

1.点击左侧的ListView,通过在在适配器中设置Item来改变颜色,再通过notifyDataSetInvalidated来刷新并用lv_home.setSelection(showTitle.get(arg2));来关联右侧的

2.右侧的主要是重写下onScroll的方法;来改变左侧ListView的颜色及背景

不过程序中还有个问题,望大神解答就是我右侧的ListView下拉时,上面的TextView能改变;但是上拉时,TextView的不能及时改变应为滑动时我只拿了firstVisibleItem来判断的

Demo的连接:http://download.csdn.net/detail/qq_29774291/9634011

如下是主程序代码

package com.item.jiejie;

import java.util.ArrayList;
import java.util.List;

import com.item.jiejie.adapter.HomeAdapter;
import com.item.jiejie.adapter.MenuAdapter;
import com.item.jiejie.entity.FoodData;
import android.widget.AbsListView.OnScrollListener;
import android.os.Bundle;
import android.app.Activity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 防饿了的ListView联动的Demo
 * 有BUG
 * @author Administrator
 *
 */
public class MainActivity extends Activity {
    /**左侧菜单*/
    private ListView lv_menu;
    /**右侧主菜*/
    private ListView lv_home;
    private TextView tv_title;

    private MenuAdapter menuAdapter;
    private HomeAdapter homeAdapter;
    private int currentItem;
    /**
     * 数据源
     */
    private List<FoodData> foodDatas;
    private String data[] = {"热销榜","新品套餐","便当套餐","单点菜品","饮料类","水果罐头","米饭"};
    /**
     * 里面存放右边ListView需要显示标题的条目position
     */
    private ArrayList<Integer> showTitle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        setView();
        setData();
    }

    private void setView() {
        // TODO Auto-generated method stub
        lv_menu = (ListView)findViewById(R.id.lv_menu);
        tv_title = (TextView)findViewById(R.id.tv_titile);
        lv_home = (ListView)findViewById(R.id.lv_home);

        foodDatas = new ArrayList<FoodData>();
        for(int i =0;i < data.length; i++){
            foodDatas.add(new FoodData(i, data[0] + i, data[0]));
        }
        for(int i =0;i < data.length -1; i++){
            foodDatas.add(new FoodData(i, data[1] + i, data[1]));
        }
        for(int i =0;i < data.length-2; i++){
            foodDatas.add(new FoodData(i, data[2] + i, data[2]));
        }
        for(int i =0;i < data.length-3; i++){
            foodDatas.add(new FoodData(i, data[3] + i, data[3]));
        }
        for(int i =0;i < data.length-4; i++){
            foodDatas.add(new FoodData(i, data[4] + i, data[4]));
        }
        for(int i =0;i < data.length-3; i++){
            foodDatas.add(new FoodData(i, data[5] + i, data[5]));
        }
        for(int i =0;i < 6; i++){
            foodDatas.add(new FoodData(i, data[6] + i, data[6]));
        }
        showTitle = new ArrayList<Integer>();
        for(int i = 0; i < foodDatas.size(); i++){
            if( i ==0){
                showTitle.add(i );
                System.out.println(i + "dd");
            }else if (!TextUtils.equals(foodDatas.get(i).getTitle(), foodDatas.get(i - 1).getTitle())) {
                showTitle.add(i );
                System.out.println(i + "dd");
            }
        }
    }

    private void setData() {
        // TODO Auto-generated method stub
        tv_title.setText(foodDatas.get(0).getTitle());
        menuAdapter = new MenuAdapter(this);
        homeAdapter = new HomeAdapter(this, foodDatas);
        lv_menu.setAdapter(menuAdapter);
        lv_home.setAdapter(homeAdapter);
        lv_menu.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                menuAdapter.setSelectItem(arg2);
                menuAdapter.notifyDataSetInvalidated();
                lv_home.setSelection(showTitle.get(arg2));

                tv_title.setText(data[arg2]);

            }
        });
        lv_home.setOnScrollListener(new OnScrollListener() {
            private int scrollState;

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub
                //System.out.println("onScrollStateChanged" + "   scrollState" + scrollState);
                this.scrollState = scrollState;
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
                if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    return;
                }
                Log.d("jiejie", "onScroll" + "  firstVisibleItem" + firstVisibleItem
                        +"  visibleItemCount" + visibleItemCount + "  totalItemCount" + totalItemCount);
                int current =showTitle.indexOf(firstVisibleItem );
                System.out.println(current + "dd"  +  firstVisibleItem);
//                lv_home.setSelection(current);
                if(currentItem != current && current >=0){
                    currentItem = current;
                    tv_title.setText(data[current]);
                    menuAdapter.setSelectItem(currentItem);
                    menuAdapter.notifyDataSetInvalidated();
                }
            }
        });
    }

}

左侧ListView的适配器代码

package com.item.jiejie.adapter;

import com.item.jiejie.R;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * 左侧菜单ListView的适配器
 * @author Administrator
 *
 */
public class MenuAdapter extends BaseAdapter{

    private Context context;
    private int selectItem = 0;
    private String data[] = {"热销榜","新品套餐","便当套餐","单点菜品","饮料类","水果罐头","米饭"};

    public MenuAdapter(Context context) {
        this.context = context;
    }

    public int getSelectItem() {
        return selectItem;
    }

    public void setSelectItem(int selectItem) {
        this.selectItem = selectItem;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.length;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if(arg1 == null) {
            holder = new ViewHolder();
            arg1 = View.inflate(context, R.layout.item_menu, null);
            holder.tv_name = (TextView)arg1.findViewById(R.id.item_name);
            arg1.setTag(holder);
        }else {
            holder = (ViewHolder)arg1.getTag();
        }
        if(arg0 == selectItem){
            holder.tv_name.setBackgroundColor(Color.WHITE);
            holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_green));
        }else {
            holder.tv_name.setBackgroundColor(context.getResources().getColor(R.color.ll_coachback));
            holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_deep));
        }
        holder.tv_name.setText(data[arg0]);
        return arg1;
    }
    static class ViewHolder{
        private TextView tv_name;
    }
}

右侧的适配器代码

package com.item.jiejie.adapter;

import java.util.List;

import com.item.jiejie.R;
import com.item.jiejie.entity.FoodData;

import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * 右侧主界面ListView的适配器
 *
 * @author Administrator
 *
 */
public class HomeAdapter extends BaseAdapter {
    private Context context;
    private List<FoodData> foodDatas;

    public HomeAdapter(Context context, List<FoodData> foodDatas) {
        this.context = context;
        this.foodDatas = foodDatas;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if(foodDatas!=null){
            return foodDatas.size();
        }else {
            return 10;
        }
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub
        ViewHold holder = null;
        if(arg1 == null){
            arg1 = View.inflate(context, R.layout.item_home, null);
            holder = new ViewHold();
            holder.tv_title = (TextView)arg1.findViewById(R.id.item_home_title);
            holder.tv_name = (TextView)arg1.findViewById(R.id.item_home_name);
            arg1.setTag(holder);
        }else {
            holder = (ViewHold)arg1.getTag();
        }
        holder.tv_name.setText(foodDatas.get(arg0).getName());
        holder.tv_title.setText(foodDatas.get(arg0).getTitle());
        if(arg0 == 0){
            holder.tv_title.setVisibility(View.VISIBLE);
        }else if (!TextUtils.equals(foodDatas.get(arg0).getTitle(), foodDatas.get(arg0 -1).getTitle())) {
            holder.tv_title.setVisibility(View.VISIBLE);
        }else {
            holder.tv_title.setVisibility(View.GONE);
        }
        return arg1;
    }
    private static class ViewHold{
        private TextView tv_title;
        private TextView tv_name;
    }
}

时间: 2024-10-13 07:13:30

仿饿了点餐界面2个ListView联动的相关文章

仿饿了么+点餐动画效果

仿饿了么+点餐动画效果 高仿饿了么安卓客户端,有相关方面需求的同学可以参考参考,不喜勿喷... 下载地址:http://www.devstore.cn/code/info/727.html 运行截图:   

仿饿了么订餐系统源码免费试用

"网上订餐"缘何受到大学生青睐"天这么冷,窝在宿舍订份外卖多舒服,哪还想'长途跋涉'去食堂呐!"只要下楼就有热腾腾的饭菜到手,订外卖已经成为郑州大学新闻与传播学院2013级王墨琴每天用餐的不二选择. 自美团外卖.饿了么.淘点点.百度外卖进驻校园后,越来越多的大学生开始选择上网订餐,每到用餐时间,宿舍楼下.图书馆门口,都会出现好几个送外卖的人员,将各家的饭菜送到同学们的手中. 学生:网上订餐比食堂还便宜 有人说网上订餐兴起的最大赢家是学生,郑州大学公共管理学院2013

高仿&lt;饿了么&gt;源码

高仿饿了么源码 高仿饿了么界面效果,动画效果还是不错滴,分享给大家一下. 下载地址:http://www.devstore.cn/code/info/1110.html 运行截图:    3 热门源码下载: 高仿京东商城 Android快速开发不可或缺的11个工具类 Android快速开发框架LoonAndroid Android应用源码比较不错的新闻客户端 版权声明:本文为博主原创文章,未经博主允许不得转载.

仿饿了么购物车下单效果

仿饿了么购物车下单效果 前一段由于新项目需要,开发一个类似饿了么购物车下单效果,电商类.外卖类.点餐类项目都可以用的上,废话不多说请看效果. 效果图如下: 主要的功能: 就是左侧展示分类,右侧展示分类下商品的,点击右侧分类下的商品,如果商品是套餐类型的话,点击可以看套餐详情,下单选择完商品后,可以在购物车里面添加或减少商品数量. 主要功能实现: 1:分类及商品及购物车里面商品数量的联动效果 2:底部购物车商品列表 3:选择左侧分类效果 4:添加商品是有0到1,减少商品有1到0动画效果 5:下单动

iOS 仿饿了么商品选择用户交互

安卓效果图,我看车不多就直接拿过来了 ![Uploading 27f3473d0d6b4c0e88de_925835.gif . . .] 27f3473d0d6b4c0e88de.gif 仿饿了么选择商品交互,image 变详情页,在掘金上看到安卓的,自己写过类似的,就也自己写一个给大家参考一下转载注明出处,谢谢代码地址 https://github.com/haoburongyi/AreYouHungryDemo 效果图 仿饿了么交互.gif

仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮

转载请标明出处: http://blog.csdn.net/zxt0601/article/details/54235736 本文出自:[张旭童的博客](http://blog.csdn.net/zxt0601) 代码传送门:喜欢的话,随手点个star.多谢 https://github.com/mcxtzhang/AnimShopButton 概述 在上文,酷炫Path动画已经预告了,今天给大家带来的是利用 纯自定义View,实现的仿饿了么加入购物车控件,自带闪转腾挪动画的按钮. 效果图如下:

android仿酷狗歌曲列表界面点击右侧字母定位到该字母的集合列表

原文:android仿酷狗歌曲列表界面点击右侧字母定位到该字母的集合列表 源代码下载地址:http://www.zuidaima.com/share/1550463694064640.htm android仿酷狗歌 曲列表界面 点击右侧字母定位到该字母的集合列表,也像类似联系人界面效果

Android 全仿To圈儿个人资料界面层叠淡入淡出显示效果

前几天做的一个仿To圈个人资料界面的实现效果 下面是To圈的效果Gif图: 做这个东西其实也花了一下午的时间,一开始思路一直没理清楚,就开始盲目的去做,结果反而事倍功半. 以后要吸取教训,先详细思考清楚其中的逻辑关系,然后再开始动手写代码,这样比较容易理顺. 可以看到实现这个效果还是不难的,得分成以下三个步骤: 1:首先要有一个可拖动的详细资料布局(下半部分). 2:上半部分可跟随移动. 3:标题栏由隐藏到显示. 涉及到的技术点有: 1:屏幕像素密度DP转化. 2:自定义视图的OnTouchLi

基于Vue框架开发的仿饿了么前端小应用

主要使用vue框架进行开发.使用最新的框架版本,修正了vue1.0到vue2.0过度过程出现的几处bug. 视频教程则是黄轶老师的<vuejs高仿饿了么APP>. 源代码地址:https://github.com/waihoyu/sell 原文地址:https://www.cnblogs.com/waihoyu/p/9350175.html