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

来源:互联网 发布:java rc4加密 编辑:程序博客网 时间:2024/05/01 17:25

先上仿效果图

饿了吗

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

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.csdn.net/detail/u013217757/9753142)

0 0
原创粉丝点击