• 仿饿了点餐界面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;
        }
    }
    View Code
    <ListView
            android:id="@+id/bus_segment_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:cacheColorHint="@color/transparent"
            android:divider="@color/transparent"
            android:fadingEdge="none"
            android:fadingEdgeLength="0dp"
            android:footerDividersEnabled="false"
            android:headerDividersEnabled="false"
            android:listSelector="@color/transparent" >
  • 相关阅读:
    HTTPS和HTTP的区别
    .NET反射、委托技术与设计模式
    中文化和国际化问题权威解析之三:Java中文问题分析
    Windows下Critical Section、Event、Mutex、Semaphores区别
    使用Forms Authentication 身份验证 之 Basic Knowledge
    介绍几个java虚拟机性能监测工具
    理解Semaphore和Mutex
    中文化和国际化问题权威解析之四:Java中文化和国际化攻略
    中文化和国际化问题权威解析之一:字符编码发展历程
    Happy new year!
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5886064.html
Copyright © 2020-2023  润新知