1. 程式人生 > >翻翻git之---利用RecyclerView實現摺疊效果 SectionedExpandableGridRecyclerView

翻翻git之---利用RecyclerView實現摺疊效果 SectionedExpandableGridRecyclerView

今天也沒有P1,因為年前醬油打多了,事情堆積到現在有點緊迫感了,快點給觀眾老爺上完聊我就去做事了!!

今天上的是一個可摺疊的RecyclerView SectionedExpandableGridRecyclerView(名字好長)

先上下效果圖:

這裡寫圖片描述

因為是RecyclerView 那這些點選、摺疊都是自己寫的事件了,所以還是感謝作者!!!

how to use?

因為原作者沒有做 jcenter下載那麼我們就只能 把程式碼和資原始檔都Copy進去了

這裡寫圖片描述

這些都弄進去

那來看看是怎麼使用的,把建立,初始化,呼叫這些事好好瞅瞅。

看看使用這個控制元件要傳些什麼

public
SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,int gridSpanCount)

需要傳4個引數分別為:

Context context 上下文物件

RecyclerView recyclerView 控制元件容器物件

ItemClickListener itemClickListener 點選事件物件

int gridSpanCount 每行顯示多少個Item

上面的GIF gridSpanCount傳入的是3,再貼個傳入2的給大家看看

這裡寫圖片描述

對了再說下XML的引用

 <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"/>

只是當普通的RecyclerView使用就好了

那資料來源怎麼操作呢?

 ArrayList<Item> arrayList = new ArrayList<>();
        arrayList.add(new
Item("iPhone", 0)); arrayList.add(new Item("iPad", 1)); arrayList.add(new Item("iPod", 2)); arrayList.add(new Item("iMac", 3)); sectionedExpandableLayoutHelper.addSection("Apple Products", arrayList);

作者對資料層進行了一定封裝,使得setAdapter()的操作,並不在我們的業務層出現。

而是在控制元件初始化時進行了設定(不過這時候資料集合是空的)

 public SectionedExpandableLayoutHelper(Context context, RecyclerView recyclerView, ItemClickListener itemClickListener,
                                           int gridSpanCount) {

        //setting the recycler view
        GridLayoutManager gridLayoutManager = new GridLayoutManager(context, gridSpanCount);
        recyclerView.setLayoutManager(gridLayoutManager);
        mSectionedExpandableGridAdapter = new SectionedExpandableGridAdapter(context, mDataArrayList,
                gridLayoutManager, itemClickListener, this);
        recyclerView.setAdapter(mSectionedExpandableGridAdapter);
    }

然後在notifyDataSetChanged()時進行資料的重新整理(無論是主動還是被動都是在這操作)

反正你如果資料發橫了變化 記得刷一刷 notifyDataSetChanged()

欄目的監聽走這

@Override
    public void itemClicked(Item item) {
        Toast.makeText(this, "Item: " + item.getName() + " clicked", Toast.LENGTH_SHORT).show();
    }

每一個Item的監聽走這

 @Override
    public void itemClicked(Section section) {
        Toast.makeText(this, "Section: " + section.getName() + " clicked", Toast.LENGTH_SHORT).show();
    }

這兩個事件的set方法都省去了,因為建構函式裡已經做了這事,當然如果你不需要,那麼久空著吧。