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

81 阅读1分钟
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的私信我,我每天都看私信的