左右联动

效果图:

1.左边列表适配器代码(TypeAdapter)

2.左边列表对应的布局文件(item_type_goods.xml)

3.右边列表适配器代码(SelectAdapter)

4.右边列表对应的布局文件(item_select_goods.xml)

5.实体类(MyContent)

6.MainActivity的主页代码

7.MainActivity的布局文件

8.附上图片

左边列表适配器代码(TypeAdapter):

package com.example.recycleview;

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

import java.util.List;

public class TypeAdapter extends BaseAdapter {
    private List<String> goodsList;
    private Context context;
    private String typeW = "";
    public TypeAdapter(List<String> goodsList,Context context){
        this.goodsList = goodsList;
        this.context = context;
    }

    public void select(String typeW){
        this.typeW = typeW;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return goodsList.size();
    }

    @Override
    public Object getItem(int i) {
        return goodsList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if(view == null){
            viewHolder = new ViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.item_type_goods,null);
            viewHolder.tvName = view.findViewById(R.id.tvName);
            viewHolder.viewColor = view.findViewById(R.id.viewColor);
            view.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder)view.getTag();
        }
        viewHolder.tvName.setText(goodsList.get(i) + "");
        if(typeW.equals(goodsList.get(i))){
            //点亮
            viewHolder.tvName.setTextColor(Color.parseColor("#FF0033"));
            viewHolder.viewColor.setBackgroundColor(Color.parseColor("#FF0033"));
        }else{
            viewHolder.tvName.setTextColor(Color.parseColor("#666666"));
            viewHolder.viewColor.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }
        return view;
    }

    class ViewHolder{
        TextView tvName; //商品名称
        View viewColor; //选中颜色
    }
}

左边列表对应的布局文件(item_type_goods.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:background="#fff"
    android:layout_marginTop="1dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    >
    <View
        android:id="@+id/viewColor"
        android:background="#fff"
        android:layout_width="4dp"
        android:layout_height="match_parent"/>
    <TextView
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:gravity="center"
        android:id="@+id/tvName"
        android:textSize="15sp"
        android:text="类型"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content" />



</LinearLayout>

右边列表适配器代码(SelectAdapter):

package com.example.recycleview;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class SelectAdapter extends BaseAdapter {

    private List<MyContent> goodsList;
    private Context context;

    public SelectAdapter(List<MyContent> goodsList,Context context){
        this.goodsList = goodsList;
        this.context = context;
    }

    @Override
    public int getCount() {
        return goodsList.size();
    }

    @Override
    public Object getItem(int i) {
        return goodsList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if(view == null){
            viewHolder = new ViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.item_select_goods,null);
            viewHolder.tvName = view.findViewById(R.id.tvName);
            viewHolder.tvType = view.findViewById(R.id.tvType);
            viewHolder.tvMoney = view.findViewById(R.id.tvMoney);
            view.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder)view.getTag();
        }
        viewHolder.tvName.setText(String.valueOf(goodsList.get(i).name));
        viewHolder.tvType.setText(String.valueOf(goodsList.get(i).type));
        viewHolder.tvMoney.setText(String.valueOf(goodsList.get(i).money));
        //当前条目类型
        String type = goodsList.get(i).type;
        if(i == 0){
            viewHolder.tvType.setVisibility(View.VISIBLE);
        }else{
            //上一个条目类型
            String nextType = goodsList.get(i - 1).type;
            if(type.equals(nextType)){
                viewHolder.tvType.setVisibility(View.GONE);
            }else{
                viewHolder.tvType.setVisibility(View.VISIBLE);
            }
        }
        return view;
    }

    //适配器中的GirdView缓存类
    class ViewHolder{
        //商品名称
        TextView tvName,tvType,tvMoney;
    }
}

右边列表对应的布局文件(item_select_goods.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#fff"
    android:layout_marginTop="1dp"
    android:gravity="center_vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:id="@+id/tvType"
        android:textSize="14sp"
        android:text="类型"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#FF0033"
        android:gravity="center_vertical|center_horizontal"
        android:paddingLeft="20dp"
        />

    <LinearLayout
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="80dp"
            android:layout_height="60dp"
            android:scaleType="fitXY"
            android:background="#0000"
            android:src="@mipmap/b1"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_marginLeft="10dp"
                android:id="@+id/tvName"
                android:textSize="15sp"
                android:text="商品名"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
            <TextView
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="10dp"
                android:layout_alignParentBottom="true"
                android:id="@+id/tvMoney_text"
                android:textSize="8sp"
                android:text="¥"
                android:textColor="#FF0033"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
            <TextView
                android:layout_marginBottom="5dp"
                android:id="@+id/tvMoney"
                android:layout_toRightOf="@+id/tvMoney_text"
                android:layout_alignParentBottom="true"
                android:textSize="15sp"
                android:text="20"
                android:textColor="#FF0033"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>

实体类(MyContent):

package com.example.recycleview;

public class MyContent {
    public String name;
    public String type;
    public int money;
}

MainActivity的主页代码:

package com.example.recycleview;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;

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


public class MainActivity extends Activity {

    private ListView lvTest;
    private ListView lvType;

    List<String> listType;
    List<MyContent> list;

    //  类型适配器
    TypeAdapter  typeAdapter;
    //  内容适配器
    SelectAdapter  selectAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        myOnclick();
    }
    private void initView() {
        lvType = findViewById(R.id.lvType);
        lvTest = findViewById(R.id.lvTest);

        //绑定类型
        listType = getDataType();
        typeAdapter = new TypeAdapter(listType,MainActivity.this);
        lvType.setAdapter(typeAdapter);

        //绑定内容
        list = getData();
        selectAdapter = new SelectAdapter(list,MainActivity.this);
        lvTest.setAdapter(selectAdapter);


    }
    private void myOnclick() {
        //类型listView的条目点击事件,定位右边列表
        lvType.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //左边类型
                String typeT=listType.get(position);
                for(int i = 0; i < list.size(); i++) {
                    //右边类型
                    String type=list.get(i).type;
                    if(typeT.equals(type)) {
                        //把定位listView的位置
                        lvTest.setSelection(i);
                        return;
                    }
                }
            }
        });
        //右边listView的滑动事件,点亮左边的选中
        lvTest.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                //三个参数
                //firstVisibleItem:当前能看见的第一个item的ID(从0开始)
                //visibleItemCount:当前可见的item总数
                //totalItemCount:列表中适配器总数量,也就是整个ListView中item总数
                String type = list.get(firstVisibleItem).type;
                typeAdapter.select(type);
            }
        });

    }
    private List<MyContent> getData(){
        List<MyContent>list = new ArrayList<>();
        for(int i = 0; i < 89; i++) {
            MyContent myContent = new MyContent();
            myContent.name="凉拌苦瓜";
            myContent.money = i;
            if(i<=10) {
                myContent.type="星期一";
            }
            else if(i>10&&i<=20) {
                myContent.type="星期二";
            }
            else if(i>20&&i<=30) {
                myContent.type="星期三";
            }
            else if(i>30&&i<=40) {
                myContent.type="星期四";
            }
            else if(i>40&&i<=50) {
                myContent.type="星期五";
            }
            else if(i>50&&i<=60) {
                myContent.type="星期六";
            }
            else if(i>60&&i<=90) {
                myContent.type="星期日";
            }
            list.add(myContent);
        }
        return list;
    }
    private List<String> getDataType(){
        List<String>list = new ArrayList<>();
        list.add("星期一");
        list.add("星期二");
        list.add("星期三");
        list.add("星期四");
        list.add("星期五");
        list.add("星期六");
        list.add("星期日");
        return list;
    }

}

MainActivity的布局文件:

<?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"
    tools:context=".MainActivity"
    android:orientation="horizontal">
    <ListView
        android:id="@+id/lvType"
        android:layout_width="80dp"
        android:layout_height="match_parent">
    </ListView>
    <LinearLayout
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/lvTest"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ListView>
    </LinearLayout>
</LinearLayout>

 图片:

猜你喜欢

转载自www.cnblogs.com/Mr-Deng/p/11436056.html
今日推荐