1+ /*
2+ * Copyright 2017 GcsSloop
3+ *
4+ * Licensed under the Apache License, Version 2.0 (the "License");
5+ * you may not use this file except in compliance with the License.
6+ * You may obtain a copy of the License at
7+ *
8+ * http://www.apache.org/licenses/LICENSE-2.0
9+ *
10+ * Unless required by applicable law or agreed to in writing, software
11+ * distributed under the License is distributed on an "AS IS" BASIS,
12+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ * See the License for the specific language governing permissions and
14+ * limitations under the License.
15+ *
16+ * Last modified 2017-04-09 14:32:41
17+ *
18+ * GitHub: https://github.com/GcsSloop
19+ * Website: http://www.gcssloop.com
20+ * Weibo: http://weibo.com/GcsSloop
21+ */
22+
23+ package com .gcssloop .diycode .fragment ;
24+
25+ import android .content .Context ;
26+ import android .os .Bundle ;
27+ import android .support .annotation .NonNull ;
28+ import android .support .v7 .widget .GridLayoutManager ;
29+ import android .support .v7 .widget .RecyclerView ;
30+
31+ import com .gcssloop .diycode .base .app .RefreshRecyclerFragment ;
32+ import com .gcssloop .diycode .fragment .provider .SiteItem ;
33+ import com .gcssloop .diycode .fragment .provider .SiteProvider ;
34+ import com .gcssloop .diycode .fragment .provider .SitesItem ;
35+ import com .gcssloop .diycode .fragment .provider .SitesProvider ;
36+ import com .gcssloop .diycode_sdk .api .sites .bean .Sites ;
37+ import com .gcssloop .diycode_sdk .api .sites .event .GetSitesEvent ;
38+ import com .gcssloop .diycode_sdk .log .Logger ;
39+ import com .gcssloop .recyclerview .adapter .multitype .HeaderFooterAdapter ;
40+
41+ import java .io .Serializable ;
42+ import java .util .ArrayList ;
43+ import java .util .List ;
44+
45+ public class SitesListFragment2 extends RefreshRecyclerFragment <Sites , GetSitesEvent > {
46+
47+ public static SitesListFragment2 newInstance () {
48+ Bundle args = new Bundle ();
49+ SitesListFragment2 fragment = new SitesListFragment2 ();
50+ fragment .setArguments (args );
51+ return fragment ;
52+ }
53+
54+ @ Override public void initData (HeaderFooterAdapter adapter ) {
55+ setLoadMoreEnable (true );
56+ List <Serializable > sitesList = mDataCache .getSitesItems ();
57+ if (sitesList != null ) {
58+ Logger .e ("sites : " + sitesList .size ());
59+ mAdapter .addDatas (sitesList );
60+ setLoadMoreEnable (false );
61+ } else {
62+ refresh ();
63+ }
64+ }
65+
66+ @ Override
67+ protected void setRecyclerViewAdapter (Context context , RecyclerView recyclerView ,
68+ HeaderFooterAdapter adapter ) {
69+ mAdapter .register (SiteItem .class , new SiteProvider (getContext ()));
70+ mAdapter .register (SitesItem .class , new SitesProvider (getContext ()));
71+ }
72+
73+ @ NonNull @ Override protected RecyclerView .LayoutManager getRecyclerViewLayoutManager () {
74+ GridLayoutManager layoutManager = new GridLayoutManager (getContext (), 2 );
75+ layoutManager .setSpanSizeLookup (new GridLayoutManager .SpanSizeLookup () {
76+ @ Override
77+ public int getSpanSize (int position ) {
78+ return (mAdapter .getDatas ().get (position ) instanceof SitesItem ) ? 2 : 1 ;
79+ }
80+ });
81+ return layoutManager ;
82+ }
83+
84+ @ NonNull @ Override protected String request (int offset , int limit ) {
85+ return mDiycode .getSites ();
86+ }
87+
88+ @ Override protected void onRefresh (GetSitesEvent event , HeaderFooterAdapter adapter ) {
89+ convertData (event .getBean ());
90+ }
91+
92+ @ Override protected void onLoadMore (GetSitesEvent event , HeaderFooterAdapter adapter ) {
93+ convertData (event .getBean ());
94+ }
95+
96+ @ Override protected void onError (GetSitesEvent event , String postType ) {
97+ toast ("获取失败" );
98+ }
99+
100+ // 转换数据
101+ private void convertData (List <Sites > sitesList ) {
102+ List <Serializable > items = new ArrayList <>();
103+ for (Sites sites : sitesList ) {
104+
105+ items .add (new SitesItem (sites .getName ()));
106+
107+ for (Sites .Site site : sites .getSites ()) {
108+ items .add (new SiteItem (site .getName (), site .getUrl (), site .getAvatar_url ()));
109+ }
110+
111+ if (sites .getSites ().size () % 2 == 1 ) {
112+ items .add (new SiteItem ("" , "" , "" ));
113+ }
114+ }
115+ mAdapter .clearDatas ();
116+ mAdapter .addDatas (items );
117+ mDataCache .saveSitesItems (items );
118+ setLoadMoreEnable (false );
119+ }
120+ }
0 commit comments