• 仿饿了吗点餐界面两个ListView联动效果


    这篇文章主要介绍了仿饿了点餐界面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

    如下是主程序代码:

      1 package com.item.jiejie;
      2 import java.util.ArrayList;
      3 import java.util.List;
      4 import com.item.jiejie.adapter.HomeAdapter;
      5 import com.item.jiejie.adapter.MenuAdapter;
      6 import com.item.jiejie.entity.FoodData;
      7 import android.widget.AbsListView.OnScrollListener;
      8 import android.os.Bundle;
      9 import android.app.Activity;
     10 import android.text.TextUtils;
     11 import android.util.Log;
     12 import android.view.View;
     13 import android.view.Window;
     14 import android.widget.AdapterView;
     15 import android.widget.AdapterView.OnItemClickListener;
     16 import android.widget.AbsListView;
     17 import android.widget.ListView;
     18 import android.widget.TextView;
     19 /**
     20 * 防饿了的ListView联动的Demo
     21 * 有BUG
     22 * @author Administrator
     23 *
     24 */
     25 public class MainActivity extends Activity {
     26 /**左侧菜单*/
     27 private ListView lv_menu;
     28 /**右侧主菜*/
     29 private ListView lv_home;
     30 private TextView tv_title;
     31 private MenuAdapter menuAdapter;
     32 private HomeAdapter homeAdapter;
     33 private int currentItem;
     34 /**
     35 * 数据源
     36 */
     37 private List<FoodData> foodDatas;
     38 private String data[] = {"热销榜","新品套餐","便当套餐","单点菜品","饮料类","水果罐头","米饭"};
     39 /**
     40 * 里面存放右边ListView需要显示标题的条目position
     41 */
     42 private ArrayList<Integer> showTitle;
     43 @Override
     44 protected void onCreate(Bundle savedInstanceState) {
     45 super.onCreate(savedInstanceState);
     46 requestWindowFeature(Window.FEATURE_NO_TITLE);
     47 setContentView(R.layout.activity_main);
     48 setView();
     49 setData();
     50 }
     51 private void setView() {
     52 // TODO Auto-generated method stub
     53 lv_menu = (ListView)findViewById(R.id.lv_menu);
     54 tv_title = (TextView)findViewById(R.id.tv_titile);
     55 lv_home = (ListView)findViewById(R.id.lv_home);
     56 foodDatas = new ArrayList<FoodData>();
     57 for(int i =0;i < data.length; i++){
     58 foodDatas.add(new FoodData(i, data[0] + i, data[0]));
     59 }
     60 for(int i =0;i < data.length -1; i++){
     61 foodDatas.add(new FoodData(i, data[1] + i, data[1]));
     62 }
     63 for(int i =0;i < data.length-2; i++){
     64 foodDatas.add(new FoodData(i, data[2] + i, data[2]));
     65 }
     66 for(int i =0;i < data.length-3; i++){
     67 foodDatas.add(new FoodData(i, data[3] + i, data[3]));
     68 }
     69 for(int i =0;i < data.length-4; i++){
     70 foodDatas.add(new FoodData(i, data[4] + i, data[4]));
     71 }
     72 for(int i =0;i < data.length-3; i++){
     73 foodDatas.add(new FoodData(i, data[5] + i, data[5]));
     74 }
     75 for(int i =0;i < 6; i++){
     76 foodDatas.add(new FoodData(i, data[6] + i, data[6]));
     77 }
     78 showTitle = new ArrayList<Integer>();
     79 for(int i = 0; i < foodDatas.size(); i++){
     80 if( i ==0){
     81 showTitle.add(i );
     82 System.out.println(i + "dd");
     83 }else if (!TextUtils.equals(foodDatas.get(i).getTitle(), foodDatas.get(i - 1).getTitle())) {
     84 showTitle.add(i );
     85 System.out.println(i + "dd");
     86 }
     87 }
     88 }
     89 private void setData() {
     90 // TODO Auto-generated method stub
     91 tv_title.setText(foodDatas.get(0).getTitle());
     92 menuAdapter = new MenuAdapter(this);
     93 homeAdapter = new HomeAdapter(this, foodDatas);
     94 lv_menu.setAdapter(menuAdapter);
     95 lv_home.setAdapter(homeAdapter);
     96 lv_menu.setOnItemClickListener(new OnItemClickListener() {
     97 @Override
     98 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     99 long arg3) {
    100 // TODO Auto-generated method stub
    101 menuAdapter.setSelectItem(arg2);
    102 menuAdapter.notifyDataSetInvalidated();
    103 lv_home.setSelection(showTitle.get(arg2));
    104 tv_title.setText(data[arg2]);
    105 }
    106 });
    107 lv_home.setOnScrollListener(new OnScrollListener() {
    108 private int scrollState;
    109 @Override
    110 public void onScrollStateChanged(AbsListView view, int scrollState) {
    111 // TODO Auto-generated method stub
    112 //System.out.println("onScrollStateChanged" + " scrollState" + scrollState);
    113 this.scrollState = scrollState;
    114 }
    115 @Override
    116 public void onScroll(AbsListView view, int firstVisibleItem,
    117 int visibleItemCount, int totalItemCount) {
    118 // TODO Auto-generated method stub
    119 if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
    120 return; 
    121 } 
    122 Log.d("jiejie", "onScroll" + " firstVisibleItem" + firstVisibleItem
    123 +" visibleItemCount" + visibleItemCount + " totalItemCount" + totalItemCount);
    124 int current =showTitle.indexOf(firstVisibleItem );
    125 System.out.println(current + "dd" + firstVisibleItem);
    126 // lv_home.setSelection(current);
    127 if(currentItem != current && current >=0){
    128 currentItem = current;
    129 tv_title.setText(data[current]);
    130 menuAdapter.setSelectItem(currentItem);
    131 menuAdapter.notifyDataSetInvalidated();
    132 }
    133 }
    134 });
    135 }
    136 }

    左侧ListView的适配器代码:

     1 package com.item.jiejie.adapter;
     2 import com.item.jiejie.R;
     3 import android.content.Context;
     4 import android.graphics.Color;
     5 import android.view.View;
     6 import android.view.ViewGroup;
     7 import android.widget.BaseAdapter;
     8 import android.widget.TextView;
     9 /**
    10 * 左侧菜单ListView的适配器
    11 * @author Administrator
    12 *
    13 */
    14 public class MenuAdapter extends BaseAdapter{
    15 private Context context;
    16 private int selectItem = 0;
    17 private String data[] = {"热销榜","新品套餐","便当套餐","单点菜品","饮料类","水果罐头","米饭"};
    18 public MenuAdapter(Context context) {
    19 this.context = context;
    20 }
    21 public int getSelectItem() {
    22 return selectItem;
    23 }
    24 public void setSelectItem(int selectItem) {
    25 this.selectItem = selectItem;
    26 }
    27 @Override
    28 public int getCount() {
    29 // TODO Auto-generated method stub
    30 return data.length;
    31 }
    32 @Override
    33 public Object getItem(int arg0) {
    34 // TODO Auto-generated method stub
    35 return null;
    36 }
    37 @Override
    38 public long getItemId(int arg0) {
    39 // TODO Auto-generated method stub
    40 return 0;
    41 }
    42 @Override
    43 public View getView(int arg0, View arg1, ViewGroup arg2) {
    44 // TODO Auto-generated method stub
    45 ViewHolder holder = null;
    46 if(arg1 == null) {
    47 holder = new ViewHolder();
    48 arg1 = View.inflate(context, R.layout.item_menu, null);
    49 holder.tv_name = (TextView)arg1.findViewById(R.id.item_name);
    50 arg1.setTag(holder);
    51 }else {
    52 holder = (ViewHolder)arg1.getTag();
    53 }
    54 if(arg0 == selectItem){
    55 holder.tv_name.setBackgroundColor(Color.WHITE);
    56 holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_green));
    57 }else {
    58 holder.tv_name.setBackgroundColor(context.getResources().getColor(R.color.ll_coachback));
    59 holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_deep));
    60 }
    61 holder.tv_name.setText(data[arg0]);
    62 return arg1;
    63 }
    64 static class ViewHolder{
    65 private TextView tv_name;
    66 }
    67 }

    右侧的适配器代码:

     1 package com.item.jiejie.adapter;
     2 import java.util.List;
     3 import com.item.jiejie.R;
     4 import com.item.jiejie.entity.FoodData;
     5 import android.content.Context;
     6 import android.text.TextUtils;
     7 import android.view.View;
     8 import android.view.ViewGroup;
     9 import android.widget.BaseAdapter;
    10 import android.widget.TextView;
    11 /**
    12 * 右侧主界面ListView的适配器
    13 * 
    14 * @author Administrator
    15 * 
    16 */
    17 public class HomeAdapter extends BaseAdapter {
    18 private Context context;
    19 private List<FoodData> foodDatas;
    20 public HomeAdapter(Context context, List<FoodData> foodDatas) {
    21 this.context = context;
    22 this.foodDatas = foodDatas;
    23 }
    24 @Override
    25 public int getCount() {
    26 // TODO Auto-generated method stub
    27 if(foodDatas!=null){
    28 return foodDatas.size();
    29 }else { 
    30 return 10;
    31 } 
    32 }
    33 @Override
    34 public Object getItem(int arg0) {
    35 // TODO Auto-generated method stub
    36 return null;
    37 }
    38 @Override
    39 public long getItemId(int arg0) {
    40 // TODO Auto-generated method stub
    41 return 0;
    42 }
    43 @Override
    44 public View getView(int arg0, View arg1, ViewGroup arg2) {
    45 // TODO Auto-generated method stub
    46 ViewHold holder = null;
    47 if(arg1 == null){
    48 arg1 = View.inflate(context, R.layout.item_home, null);
    49 holder = new ViewHold();
    50 holder.tv_title = (TextView)arg1.findViewById(R.id.item_home_title);
    51 holder.tv_name = (TextView)arg1.findViewById(R.id.item_home_name);
    52 arg1.setTag(holder);
    53 }else {
    54 holder = (ViewHold)arg1.getTag();
    55 }
    56 holder.tv_name.setText(foodDatas.get(arg0).getName());
    57 holder.tv_title.setText(foodDatas.get(arg0).getTitle());
    58 if(arg0 == 0){
    59 holder.tv_title.setVisibility(View.VISIBLE);
    60 }else if (!TextUtils.equals(foodDatas.get(arg0).getTitle(), foodDatas.get(arg0 -1).getTitle())) {
    61 holder.tv_title.setVisibility(View.VISIBLE);
    62 }else {
    63 holder.tv_title.setVisibility(View.GONE);
    64 }
    65 return arg1;
    66 }
    67 private static class ViewHold{
    68 private TextView tv_title;
    69 private TextView tv_name;
    70 }
    71 }

    以上所述是给大家介绍的仿饿了点餐界面2个ListView联动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言。

  • 相关阅读:
    Mysql多个字段同时满足多组条件
    spring-boot 配置Druid监控
    回顾存储过程简单使用
    win10环境下使用docker部署spring-boot项目
    LeetCode 35. 搜索插入位置
    二分查找
    归并排序(二)
    归并排序
    剑指 Offer 68
    剑指 Offer 68
  • 原文地址:https://www.cnblogs.com/huolongluo/p/6497328.html
Copyright © 2020-2023  润新知