listview双联动

activity_main布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="yangxuexue.bwie.com.listviewsld.MainActivity">

    <ListView
        android:layout_weight="1"
        android:id="@+id/listview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></ListView>
<LinearLayout
    android:layout_weight="1"
   android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<TextView
    android:id="@+id/tv_titile"
    android:textSize="25dp"
    android:text="dsgf"
    android:textStyle="bold"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

    <ListView
        android:id="@+id/listview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></ListView>
</LinearLayout>


</LinearLayout>

item_home布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<TextView
    android:id="@+id/item_home_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"/>
    <TextView
        android:id="@+id/item_home_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>
</LinearLayout>

item_menu布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<TextView
    android:id="@+id/item_name"
    android:textSize="20sp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

FoodData 类


    public class FoodData {
        private int type;// 类型 根据类型显示标题
        private String name;// 菜的名字
        private String title;

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public FoodData(int type, String name, String title) {
            super();
            this.type = type;
            this.name = name;
            this.title = title;
        }

    }

MenuAdapter 类

import android.content.Context;
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.setTextColor(context.getResources().getColor(R.color.text_green));
        }else {

            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;
    }
}

HomeAdapter 类

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

import java.util.List;

/**
 * 右侧主界面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;
    }
}

mainactivity类

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;

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

/**
 * 防饿了的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.listview1);
        tv_title = (TextView) findViewById(R.id.tv_titile);
        lv_home = (ListView) findViewById(R.id.listview2);

        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);
            } else if (!TextUtils.equals(foodDatas.get(i).getTitle(), foodDatas.get(i - 1).getTitle())) {
                showTitle.add(i);


            }
        }
    }

    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
                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);


                if (currentItem != current && current >= 0) {
                    currentItem = current;
                    tv_title.setText(data[current]);
                    menuAdapter.setSelectItem(currentItem);
                    menuAdapter.notifyDataSetInvalidated();
                }
            }
        });
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值