ReclyerView双联动,仿饿了吗店铺详情页

先上仿效果图

饿了吗

参考文章和实现原理,传送门

android 二级联动列表,仿eleme点餐页面

原创作者的Demo,没有粘性头部的实现,增加了粘性头部,使用ListVIew作Tab 对折叠布局的滑动处理不友好要么是显示不全,增加一套ReclyerView Tab,解决折叠布局滑动处理,修改了索引条件,增加索引区间实现

没有使用折叠布局方式:
布局:
<?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"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:onClick="btnClick"
        android:text="使用RecylerTab" />

    <com.credit.linkedscroll.ui.MyLinkedLayout
        android:id="@+id/linked_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="true"
        android:orientation="horizontal"
        android:saveEnabled="false">

        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="2.5" />



        <View
            android:layout_width="1dp"
            android:layout_height="match_parent" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#ffbef0ff" />

    </com.credit.linkedscroll.ui.MyLinkedLayout>


</LinearLayout>
源码:
package com.credit.linkedscroll.ui;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ListView;

import com.credit.linkedscroll.R;
import com.credit.linkedscroll.base.BaseScrollableContainer;
import com.credit.linkedscroll.content.RecyclerViewContentContainer;
import com.credit.linkedscroll.tab.ListViewTabContainer;
import com.credit.linkedscroll.adapter.AnimalsImpAdapter;
import com.credit.linkedscroll.adapter.ListAdapter;
import com.credit.linkedscroll.widget.TestSectionIndexer;
import com.timehop.stickyheadersrecyclerview.StickyRecyclerHeadersDecoration;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.linked_layout)
    MyLinkedLayout mLinkedLayout;

    @BindView(R.id.listview)
    ListView mListView;


    @BindView(R.id.recyclerview)
    RecyclerView mRecyclerView;

    private BaseScrollableContainer mTabContainer;      // 左边的 Tab 页
    private RecyclerViewContentContainer mContentContainer;  // 右边的 content 页


    private TestSectionIndexer testSectionIndexer;  //索引

    public List<TestBean> list;
    private LinkedList<TestBean.Item> mreData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        Random random = new Random();
        list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            TestBean b = new TestBean();
            b.name = "listView" + i;
            b.sortPos = i;
            b.listdata = new ArrayList<>();
            int num = random.nextInt(15);
            if (num < 5) {
                num = 6;
            }
            for (int j = 0; j < num; j++) {
                TestBean.Item item = new TestBean.Item();
                item.kindName = "listView" + i;
                item.name = i + ">>item>>" + j;
                item.type = i;
                b.listdata.add(item);

            }


            list.add(b);
        }
        mreData = new LinkedList<>();

        for (TestBean t : list) {
            t.position = mreData.size();
            mreData.addAll(t.listdata);
        }


        testSectionIndexer = new TestSectionIndexer(list);


        initTabContainer();
        initContentContainer();
        initLinkedLayout();
    }

    private void initTabContainer() {
        mListView.setAdapter(new ListAdapter(this, list));
        mTabContainer = new ListViewTabContainer(this, mListView);
    }

    private void initContentContainer() {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        AnimalsImpAdapter testAdapter = new AnimalsImpAdapter();
        testAdapter.changeData(mreData);
        mRecyclerView.setAdapter(testAdapter);

        // Add the sticky headers decoration
        final StickyRecyclerHeadersDecoration headersDecor = new StickyRecyclerHeadersDecoration(testAdapter);
        mRecyclerView.addItemDecoration(headersDecor);
        // Add decoration for dividers between list items
        mRecyclerView.addItemDecoration(new DividerDecoration(this));
        mContentContainer = new RecyclerViewContentContainer(this, mRecyclerView);
        mContentContainer.setSectionIndexer(testSectionIndexer);

    }

    private void initLinkedLayout() {
        mLinkedLayout.setmSectionIndexer(testSectionIndexer);
        mLinkedLayout.setContainers(mTabContainer, mContentContainer);
    }

    public void btnClick(View v) {
        startActivity(new Intent(this, RecylerTabActivity.class));
    }
}
1.初始化索引条件
 testSectionIndexer = new TestSectionIndexer(list);
2.初始化列表
  /**
  初始化Tab 列表 
  */
 private void initTabContainer() {
        mListView.setAdapter(new ListAdapter(this, list));
        mTabContainer = new ListViewTabContainer(this, mListView);
    }
 /**
  初始化内容 列表 
  */
    private void initContentContainer() {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        AnimalsImpAdapter testAdapter = new AnimalsImpAdapter();
        testAdapter.changeData(mreData);
        mRecyclerView.setAdapter(testAdapter);

        // Add the sticky headers decoration
        final StickyRecyclerHeadersDecoration headersDecor = new StickyRecyclerHeadersDecoration(testAdapter);
        mRecyclerView.addItemDecoration(headersDecor);
        // Add decoration for dividers between list items
        mRecyclerView.addItemDecoration(new DividerDecoration(this));
        mContentContainer = new RecyclerViewContentContainer(this, mRecyclerView);

/**

若使用粘性头部,要赋值索引引用对象
*/        mContentContainer.setSectionIndexer(testSectionIndexer);

    }

使用粘性头部时的注意,RecyclerViewContentContainer 要要赋值索引引用对象

mContentContainer.setSectionIndexer(testSectionIndexer);
3.关联
   private void initLinkedLayout() {
        mLinkedLayout.setmSectionIndexer(testSectionIndexer);
        mLinkedLayout.setContainers(mTabContainer, mContentContainer);
    }

Demo下载链接

[代码下载链接]http://download.youkuaiyun.com/detail/u013217757/9753142)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值