Skip to content

Commit 2283e5b

Browse files
committed
保存TopicList状态
1 parent 3adc867 commit 2283e5b

3 files changed

Lines changed: 88 additions & 18 deletions

File tree

diycode-app/src/main/java/com/gcssloop/diycode/activity/SettingActivity.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.io.File;
3737

3838
public class SettingActivity extends BaseActivity implements View.OnClickListener {
39+
private Config mConfig;
3940

4041
@Override
4142
protected int getLayoutId() {
@@ -45,16 +46,16 @@ protected int getLayoutId() {
4546
@Override
4647
protected void initViews(ViewHolder holder, View root) {
4748
setTitle("设置");
48-
final Config config = Config.getSingleInstance();
49+
mConfig = Config.getSingleInstance();
4950
showCacheSize(holder);
5051

51-
Boolean isUseInside = config.isUseInsideBrowser();
52+
Boolean isUseInside = mConfig.isUseInsideBrowser();
5253
Switch isUseInsideBrowser = holder.get(R.id.use_inside_browser);
5354
isUseInsideBrowser.setChecked(isUseInside);
5455
isUseInsideBrowser.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
5556
@Override
5657
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
57-
config.setUesInsideBrowser(isChecked);
58+
mConfig.setUesInsideBrowser(isChecked);
5859
}
5960
});
6061

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

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import android.support.v4.util.ArrayMap;
2828
import android.support.v4.widget.NestedScrollView;
2929
import android.support.v4.widget.SwipeRefreshLayout;
30+
import android.support.v7.widget.LinearLayoutManager;
3031
import android.support.v7.widget.RecyclerView;
3132
import android.view.View;
3233
import android.widget.TextView;
@@ -35,11 +36,12 @@
3536
import com.gcssloop.diycode.adapter.TopicAdapter;
3637
import com.gcssloop.diycode.base.app.BaseFragment;
3738
import com.gcssloop.diycode.base.app.ViewHolder;
39+
import com.gcssloop.diycode.utils.Config;
3840
import com.gcssloop.diycode.utils.DataCache;
39-
import com.gcssloop.diycode.utils.RecyclerViewUtil;
4041
import com.gcssloop.diycode_sdk.api.Diycode;
4142
import com.gcssloop.diycode_sdk.api.topic.bean.Topic;
4243
import com.gcssloop.diycode_sdk.api.topic.event.GetTopicsListEvent;
44+
import com.gcssloop.diycode_sdk.log.Logger;
4345

4446
import org.greenrobot.eventbus.EventBus;
4547
import org.greenrobot.eventbus.Subscribe;
@@ -80,9 +82,12 @@ public class TopicListFragment extends BaseFragment {
8082
// View
8183
private TopicAdapter mAdapter;
8284
private SwipeRefreshLayout mRefreshLayout;
85+
NestedScrollView mScrollView;
86+
private LinearLayoutManager mLinearLayoutManager;
8387

8488
private boolean isFirstLaunch = true; // 是否是第一次加载
8589

90+
private Config mConfig;
8691

8792
public static TopicListFragment newInstance() {
8893
Bundle args = new Bundle();
@@ -98,16 +103,18 @@ protected int getLayoutId() {
98103

99104
@Override
100105
protected void initViews(ViewHolder holder, View root) {
106+
mConfig = Config.getSingleInstance();
101107
mDiycode = Diycode.getSingleInstance();
102108
mDataCache = new DataCache(getContext());
103109
mFooter = holder.get(R.id.footer);
110+
mScrollView = holder.get(R.id.scroll_view);
104111
initRefreshLayout(holder);
105112
initRecyclerView(getContext(), holder);
106113
initListener(holder);
107114
}
108115

109116
// 加载数据,默认从缓存加载
110-
private void loadData() {
117+
private void initData() {
111118
mRefreshLayout.setEnabled(true);
112119
List<Topic> topics = mDataCache.getTopicsList();
113120
if (null != topics && topics.size() > 0) {
@@ -137,9 +144,16 @@ private void initRefreshLayout(ViewHolder holder) {
137144
}
138145

139146
private void initRecyclerView(final Context context, ViewHolder holder) {
140-
mAdapter = new TopicAdapter(context, mDataCache);
141147
RecyclerView recyclerView = holder.get(R.id.recycler_view);
142-
RecyclerViewUtil.init(context, recyclerView, mAdapter);
148+
mAdapter = new TopicAdapter(context, mDataCache);
149+
recyclerView.setAdapter(mAdapter);
150+
mLinearLayoutManager = new LinearLayoutManager(context);
151+
mLinearLayoutManager.setSmoothScrollbarEnabled(true);
152+
mLinearLayoutManager.setAutoMeasureEnabled(true);
153+
recyclerView.setLayoutManager(mLinearLayoutManager);
154+
recyclerView.setHasFixedSize(true);
155+
recyclerView.setNestedScrollingEnabled(false);
156+
Logger.e("初始化View");
143157
}
144158

145159
private void initListener(ViewHolder holder) {
@@ -235,12 +249,32 @@ public void onTopicList(GetTopicsListEvent event) {
235249
public void onStart() {
236250
super.onStart();
237251
EventBus.getDefault().register(this);
238-
loadData();
252+
initData();
253+
}
254+
255+
@Override
256+
public void onResume() {
257+
super.onResume();
258+
final int lastScroll = mConfig.getTopicLastScroll();
259+
mScrollView.post(new Runnable() {
260+
@Override
261+
public void run() {
262+
mScrollView.scrollTo(0, lastScroll);
263+
}
264+
});
239265
}
240266

241267
@Override
242268
public void onStop() {
243269
super.onStop();
244270
EventBus.getDefault().unregister(this);
245271
}
272+
273+
@Override
274+
public void onDestroyView() {
275+
// 保存
276+
int lastScrollY = mScrollView.getScrollY();
277+
mConfig.saveTopicListScroll(lastScrollY);
278+
super.onDestroyView();
279+
}
246280
}

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

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,15 @@
2424

2525
import android.content.Context;
2626
import android.support.annotation.NonNull;
27+
import android.support.annotation.Nullable;
2728
import android.util.LruCache;
2829

2930
import com.gcssloop.diycode_sdk.utils.ACache;
3031

32+
import java.io.Serializable;
33+
34+
import static android.R.attr.value;
35+
3136
/**
3237
* 用户设置
3338
*/
@@ -56,20 +61,50 @@ public static Config getSingleInstance() {
5661
return mConfig;
5762
}
5863

59-
private static String Key_Browser = "isUseInsideBrowser_";
64+
//--- 基础 -----------------------------------------------------------------------------------
65+
66+
public <T extends Serializable> void saveData(@NonNull String key, @NonNull T value) {
67+
mLruCache.put(key, value);
68+
mDiskCache.put(key, value);
69+
}
70+
71+
public <T extends Serializable> T getData(@NonNull String key, @Nullable T defaultValue) {
72+
T result = (T) mLruCache.get(key);
73+
if (result != null) {
74+
return result;
75+
}
76+
result = (T) mDiskCache.getAsObject(key);
77+
if (result != null) {
78+
mLruCache.put(key, value);
79+
return result;
80+
}
81+
return defaultValue;
82+
}
83+
84+
//--- 浏览器 ---------------------------------------------------------------------------------
85+
86+
private static String Key_Browser = "UseInsideBrowser_";
6087

6188
public void setUesInsideBrowser(@NonNull Boolean bool) {
62-
mLruCache.put(Key_Browser, bool);
63-
mDiskCache.put(Key_Browser, bool);
89+
saveData(Key_Browser, bool);
6490
}
6591

6692
public Boolean isUseInsideBrowser() {
67-
Boolean bool = (Boolean) mLruCache.get(Key_Browser);
68-
if (bool == null)
69-
bool = (Boolean) mDiskCache.getAsObject(Key_Browser);
70-
if (bool == null)
71-
bool = true;
72-
setUesInsideBrowser(bool);
73-
return bool;
93+
return getData(Key_Browser, true);
7494
}
95+
96+
97+
//--- 状态 -----------------------------------------------------------------------------------
98+
99+
private String Key_TopicList_LastScroll = "Key_TopicList_LastScroll";
100+
101+
public void saveTopicListScroll(Integer scrollY) {
102+
mLruCache.put(Key_TopicList_LastScroll, scrollY);
103+
mDiskCache.put(Key_TopicList_LastScroll, scrollY);
104+
}
105+
106+
public Integer getTopicLastScroll() {
107+
return getData(Key_TopicList_LastScroll, 0);
108+
}
109+
75110
}

0 commit comments

Comments
 (0)