当前位置: 首页 > article >正文

Android仿美团左右联动购物列表

Android仿美团左右联动购物列表

左右联动购物列表,不难。

一、思路:

两个RecycleView

二、效果图:

在这里插入图片描述

三、关键代码:
public class MainActivity extends AppCompatActivity {

    private RecyclerView rl_left;
    private RecyclerView rl_right;

    private LinkedHashMap<Integer, String> mHeaderList = new LinkedHashMap<>();
    private ArrayList<FoodBean> rightFoods = new ArrayList<>();
    private ArrayList<LeftBean> leftTitles = new ArrayList<>();
    private RightAdapter rightAdapter;
    private LeftAdapter leftAdapter;
    private LinearLayoutManager mLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();
        initView();

    }

    private void initView(){
        rl_left = findViewById(R.id.rl_left);
        rl_right = findViewById(R.id.rl_right);

        rl_right.setLayoutManager(mLayoutManager = new LinearLayoutManager(this));
        rl_right.addItemDecoration(
                new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        FloatingBarItemDecoration floatingBarItemDecoration = new FloatingBarItemDecoration(this, mHeaderList);
        rl_right.addItemDecoration(floatingBarItemDecoration);
        rightAdapter = new RightAdapter(LayoutInflater.from(this),
                rightFoods);
        rl_right.setAdapter(rightAdapter);
        floatingBarItemDecoration.setOnChangeTitleListener(new FloatingBarItemDecoration.OnChangeTitleListener() {
            @Override
            public void onChangePosition(int position) {
                if (!TextUtils.isEmpty(rightFoods.get(position).getItemTitle())){
                    //判断不同才更新左边选中标题,避免左边因为一直在刷新导致没法响应点击事件
                    if (leftAdapter != null && !rightFoods.get(position).getItemTitle().equals(leftAdapter.getCurrentTitle())){
                        leftAdapter.setCurrentPosition(position);
                    }
                }
            }
        });

        rl_left.setLayoutManager(new LinearLayoutManager(this));
        leftTitles.get(0).setSelect(true); //初始化第一个设为true
        leftAdapter = new LeftAdapter(leftTitles);
        rl_left.setAdapter(leftAdapter);

        leftAdapter.setOnItemClickListener(new LeftAdapter.OnItemClickListener() {
            @Override
            public void onItemClicked(int rightPosition) {
                if (mLayoutManager != null){
                    mLayoutManager.scrollToPositionWithOffset(rightPosition, 0);
                }
            }
        });


    }

    private void initData(){
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡1","汉堡"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡2"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡3"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡4"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡5"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡6"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu1,"汉堡7"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡1","炸鸡"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡2"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡3"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡4"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡5"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡6"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu2,"炸鸡7"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条1","薯条"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条2"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条3"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条4"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条5"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条6"));
        rightFoods.add(new FoodBean(R.mipmap.shiwu3,"薯条7"));

        for (int i = 0;i<rightFoods.size();i++){
            if (!TextUtils.isEmpty(rightFoods.get(i).getItemTitle())){
                mHeaderList.put(i,rightFoods.get(i).getItemTitle());
                leftTitles.add(new LeftBean(i,rightFoods.get(i).getItemTitle()));
            }
        }

    }
}
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码demo的私信我,我每天都看私信的


http://www.kler.cn/a/427878.html

相关文章:

  • 数据分析类论文通过stata进行数据预处理(一)
  • 数据仓库全生命周期管理
  • 怎么实现邮件营销自动化?
  • 数据结构-查找
  • 基于 Apache Dolphinscheduler3.1.9中的Task 处理流程解析
  • Qt之第三方库‌QXlsx使用(三)
  • Dockerfile容器镜像构建技术
  • 13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程
  • PDF解析方法详解 JavaPython 原创
  • 距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码
  • python使用h5py保存数据
  • D614 PHP+MYSQL +失物招领系统网站的设计与现 源代码 配置 文档
  • 【Axure高保真原型】数值条件分组
  • [C++设计模式] 深入理解面向对象设计原则
  • 解决Jupyter Notebook无法转化为Pdf的问题(基于Typora非常实用)
  • shell脚本实战案例
  • 计算机网络复习6——应用层
  • SQL——DQL分组聚合
  • 档案学实物
  • 如何解决‘逻辑删除‘和‘唯一索引‘冲突的问题