• 左右联动


    效果图:

    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>
    

     图片:

  • 相关阅读:
    Python中的try...except...finally
    JavaScript 实现双向队列并用此来测试一个单词是否为回文
    js 触发 change 事件
    MySQL8 重置改root密码及开放远程访问
    根据数组下标在MongoDB中修改数组元素
    pymongo CursorNotFound错误
    mongodb根据子项中的指标查找最小或最大值
    正则文本过滤时的一些注意事项
    github page更新后不生效
    Xpath同时选取不同属性的元素
  • 原文地址:https://www.cnblogs.com/Mr-Deng/p/11436056.html
Copyright © 2020-2023  润新知