Skip to content

Commit 272ce06

Browse files
committed
完善缓存和状态恢复
1 parent 78b43df commit 272ce06

3 files changed

Lines changed: 51 additions & 22 deletions

File tree

diycode-app/src/main/java/com/gcssloop/diycode/fragment/RefreshRecyclerFragment.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public abstract class RefreshRecyclerFragment<T, Event extends BaseEvent<List<T>
7676
private HeaderFooterAdapter mAdapter;
7777
private FooterProvider mFooterProvider;
7878

79+
protected boolean isFirstAddFooter = true;
80+
7981
@Override
8082
protected int getLayoutId() {
8183
return R.layout.fragment_refresh_recycler;
@@ -88,7 +90,10 @@ protected void initViews(ViewHolder holder, View root) {
8890
mFooterProvider = new FooterProvider(getContext()) {
8991
@Override
9092
public void needLoadMore() {
91-
super.needLoadMore();
93+
if (isFirstAddFooter){
94+
isFirstAddFooter = false;
95+
return;
96+
}
9297
loadMore();
9398
}
9499
};
@@ -112,6 +117,7 @@ public void onRefresh() {
112117
refresh();
113118
}
114119
});
120+
initData(mAdapter);
115121
}
116122

117123
protected void refresh() {

diycode-app/src/main/java/com/gcssloop/diycode/fragment/TopicListFragment.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,10 @@
4040
import com.gcssloop.diycode_sdk.log.Logger;
4141
import com.gcssloop.recyclerview.adapter.multitype.HeaderFooterAdapter;
4242

43-
public class TopicListFragment extends RefreshRecyclerFragment<Topic, GetTopicsListEvent> {
43+
import java.util.ArrayList;
44+
import java.util.List;
4445

45-
// RecyclerView 滚动位置保存与恢复
46-
private int lastPosition = 0;
47-
private int lastOffset = 0;
46+
public class TopicListFragment extends RefreshRecyclerFragment<Topic, GetTopicsListEvent> {
4847

4948
private boolean isFirstLaunch = true;
5049
// 数据
@@ -69,20 +68,23 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
6968

7069
@Override
7170
public void initData(HeaderFooterAdapter adapter) {
72-
/*
7371
List<Topic> topics = mDataCache.getTopicsList();
7472
if (null != topics && topics.size() > 0) {
75-
// TODO 恢复Index
73+
Logger.e("topics : " + topics.size());
74+
pageIndex = mConfig.getTopicListPageIndex();
7675
adapter.addDatas(topics);
77-
// 设置底部
7876
if (isFirstLaunch) {
79-
// TODO 滚动到上次到位置
77+
int lastPosition = mConfig.getTopicListLastPosition();
78+
int lastOffset = mConfig.getTopicListLastOffset();
79+
if (lastPosition != 0) {
80+
mRecyclerView.getLayoutManager().scrollToPosition(lastPosition);
81+
}
82+
isFirstAddFooter = false;
8083
isFirstLaunch = false;
8184
}
8285
} else {
8386
loadMore();
84-
}*/
85-
loadMore();
87+
}
8688
}
8789

8890
@Override
@@ -110,12 +112,14 @@ protected void onRefresh(GetTopicsListEvent event, HeaderFooterAdapter adapter)
110112
adapter.clearDatas();
111113
adapter.addDatas(event.getBean());
112114
toast("刷新成功");
115+
mDataCache.saveTopicsList(convert(adapter.getDatas()));
113116
}
114117

115118
@Override
116119
protected void onLoadMore(GetTopicsListEvent event, HeaderFooterAdapter adapter) {
117120
adapter.addDatas(event.getBean());
118121
toast("加载更多成功");
122+
mDataCache.saveTopicsList(convert(adapter.getDatas()));
119123
}
120124

121125
@Override
@@ -127,6 +131,16 @@ protected void onError(GetTopicsListEvent event, String postType) {
127131
}
128132
}
129133

134+
@SuppressWarnings("unchecked")
135+
public ArrayList<Topic> convert(List<Object> objects) {
136+
ArrayList<Topic> topics = new ArrayList<>();
137+
for (Object obj : objects) {
138+
if (obj instanceof Topic)
139+
topics.add((Topic) obj);
140+
}
141+
return topics;
142+
}
143+
130144
@Override
131145
public void onDestroyView() {
132146
super.onDestroyView();
@@ -136,10 +150,13 @@ public void onDestroyView() {
136150
// 保存状态
137151
private void saveState() {
138152
// 存储 PageIndex
153+
mConfig.saveTopicListPageIndex(pageIndex);
154+
// 存储 RecyclerView 滚动位置
139155
RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
140156
View view = layoutManager.getChildAt(0);
141-
lastPosition = layoutManager.getPosition(view);
142-
lastOffset = view.getTop();
157+
int lastPosition = layoutManager.getPosition(view);
158+
int lastOffset = view.getTop();
159+
mConfig.saveTopicListState(lastPosition, lastOffset);
143160
Logger.e("onDestroyView", lastPosition + " : " + lastOffset);
144161
}
145162
}

diycode-app/src/main/java/com/gcssloop/diycode/utils/Config.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,23 +106,29 @@ public Integer getMainViewPagerPosition() {
106106

107107
//--- Topic状态 ------------------------------------------------------------------------------
108108

109-
private String Key_TopicList_LastScroll = "Key_TopicList_LastScroll";
109+
private String Key_TopicList_LastPosition = "Key_TopicList_LastPosition";
110+
private String Key_TopicList_LastOffset = "Key_TopicList_LastOffset";
110111

111-
public void saveTopicListScroll(Integer lastScrollY) {
112-
saveData(Key_TopicList_LastScroll, lastScrollY);
112+
public void saveTopicListState(Integer lastPosition, Integer lastOffset) {
113+
saveData(Key_TopicList_LastPosition, lastPosition);
114+
saveData(Key_TopicList_LastOffset, lastOffset);
113115
}
114116

115-
public Integer getTopicLastScroll() {
116-
return getData(Key_TopicList_LastScroll, 0);
117+
public Integer getTopicListLastPosition() {
118+
return getData(Key_TopicList_LastPosition, 0);
119+
}
120+
121+
public Integer getTopicListLastOffset() {
122+
return getData(Key_TopicList_LastOffset, 0);
117123
}
118124

119125
private String Key_TopicList_PageIndex = "Key_TopicList_PageIndex";
120126

121-
public void saveTopicListPageIndex(Integer pageIndex){
127+
public void saveTopicListPageIndex(Integer pageIndex) {
122128
saveData(Key_TopicList_PageIndex, pageIndex);
123129
}
124130

125-
public Integer getTopicListPageIndex(){
131+
public Integer getTopicListPageIndex() {
126132
return getData(Key_TopicList_PageIndex, 0);
127133
}
128134

@@ -140,11 +146,11 @@ public Integer getNewsLastScroll() {
140146

141147
private String Key_NewsList_PageIndex = "Key_NewsList_PageIndex";
142148

143-
public void saveNewsListPageIndex(Integer pageIndex){
149+
public void saveNewsListPageIndex(Integer pageIndex) {
144150
saveData(Key_NewsList_PageIndex, pageIndex);
145151
}
146152

147-
public Integer getNewsListPageIndex(){
153+
public Integer getNewsListPageIndex() {
148154
return getData(Key_NewsList_PageIndex, 0);
149155
}
150156
}

0 commit comments

Comments
 (0)