Skip to content

Commit da965f7

Browse files
committed
RecyclerView: 启用预加载
1 parent 488074d commit da965f7

File tree

6 files changed

+37
-14
lines changed

6 files changed

+37
-14
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright 2016 Alex Zhang aka. ztc1997
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+
17+
package com.rayfantasy.icode.extra
18+
19+
import android.content.Context
20+
import android.support.v7.widget.LinearLayoutManager
21+
import android.support.v7.widget.RecyclerView
22+
23+
class PreloadLinearLayoutManager(context: Context?) : LinearLayoutManager(context) {
24+
override fun getExtraLayoutSpace(state: RecyclerView.State?) = 1000
25+
}

app/src/main/kotlin/com/rayfantasy/icode/ui/activity/BlocksActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package com.rayfantasy.icode.ui.activity
22

33
import android.databinding.DataBindingUtil
44
import android.os.Bundle
5-
import android.support.v7.widget.LinearLayoutManager
65
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator
76
import com.rayfantasy.icode.R
87
import com.rayfantasy.icode.databinding.ActivityBlocksBinding
8+
import com.rayfantasy.icode.extra.PreloadLinearLayoutManager
99
import com.rayfantasy.icode.model.ICodeTheme
1010
import com.rayfantasy.icode.postutil.PostUtil
1111
import com.rayfantasy.icode.postutil.bean.CodeGood
@@ -29,7 +29,7 @@ class BlocksActivity : ActivityBindingStatus() {
2929
codeGood = intent.getSerializableExtra("codeGood") as CodeGood
3030
title = codeGood.title
3131
with(recyclerView) {
32-
layoutManager = LinearLayoutManager(this@BlocksActivity)
32+
layoutManager = PreloadLinearLayoutManager(this@BlocksActivity)
3333
itemAnimator = RefactoredDefaultItemAnimator()
3434
}
3535

app/src/main/kotlin/com/rayfantasy/icode/ui/activity/ReplyActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package com.rayfantasy.icode.ui.activity
22

33
import android.databinding.DataBindingUtil
44
import android.os.Bundle
5-
import android.support.v7.widget.LinearLayoutManager
65
import android.support.v7.widget.Toolbar
76
import com.android.volley.Request
87
import com.raizlabs.android.dbflow.sql.language.Select
98
import com.rayfantasy.icode.R
109
import com.rayfantasy.icode.databinding.ActivityReplyBinding
1110
import com.rayfantasy.icode.extension.string
11+
import com.rayfantasy.icode.extra.PreloadLinearLayoutManager
1212
import com.rayfantasy.icode.model.ICodeTheme
1313
import com.rayfantasy.icode.postutil.PostUtil
1414
import com.rayfantasy.icode.postutil.bean.Reply
@@ -71,8 +71,7 @@ class ReplyActivity : ActivityBindingStatus() {
7171
}
7272

7373
private fun initRecyclerView() {
74-
val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
75-
reply_recyclerview.layoutManager = layoutManager
74+
reply_recyclerview.layoutManager = PreloadLinearLayoutManager(this)
7675
adapter = ReplyListAdapter(this, SetUniqueList.setUniqueList(getCacheData())) { loadReplys(false) }
7776
reply_recyclerview.adapter = adapter
7877

app/src/main/kotlin/com/rayfantasy/icode/ui/activity/UserActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package com.rayfantasy.icode.ui.activity
22

33
import android.databinding.DataBindingUtil
44
import android.os.Bundle
5-
import android.support.v7.widget.LinearLayoutManager
65
import android.view.Menu
76
import android.view.MenuItem
87
import com.android.volley.Request
98
import com.rayfantasy.icode.R
109
import com.rayfantasy.icode.databinding.ActivityUserBinding
10+
import com.rayfantasy.icode.extra.PreloadLinearLayoutManager
1111
import com.rayfantasy.icode.model.ICodeTheme
1212
import com.rayfantasy.icode.postutil.PostUtil
1313
import com.rayfantasy.icode.ui.adapter.UserListAdapter
@@ -38,8 +38,7 @@ class UserActivity : ActivityBindingStatus() {
3838
}
3939

4040
private fun initRecyclerView() {
41-
val layoutManager = LinearLayoutManager(this)
42-
user_recyclerview.layoutManager = layoutManager
41+
user_recyclerview.layoutManager = PreloadLinearLayoutManager(this)
4342
adapter = UserListAdapter(this, username, ArrayList()) {}
4443
user_recyclerview.adapter = adapter
4544
refresh()

app/src/main/kotlin/com/rayfantasy/icode/ui/activity/WriteCodeActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package com.rayfantasy.icode.ui.activity
33
import android.databinding.DataBindingUtil
44
import android.os.Bundle
55
import android.support.design.widget.Snackbar
6-
import android.support.v7.widget.LinearLayoutManager
76
import com.android.volley.Request
87
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator
98
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager
109
import com.rayfantasy.icode.R
1110
import com.rayfantasy.icode.databinding.ActivityWriteCodeBinding
1211
import com.rayfantasy.icode.extension.snackBar
12+
import com.rayfantasy.icode.extra.PreloadLinearLayoutManager
1313
import com.rayfantasy.icode.model.ICodeTheme
1414
import com.rayfantasy.icode.postutil.PostUtil
1515
import com.rayfantasy.icode.postutil.bean.CodeGood
@@ -33,7 +33,7 @@ class WriteCodeActivity : ActivityBindingStatus() {
3333
recyclerViewDragDropManager.setInitiateOnLongPress(true)
3434
recyclerViewDragDropManager.setInitiateOnMove(false)
3535
with(recyclerView) {
36-
layoutManager = LinearLayoutManager(this@WriteCodeActivity)
36+
layoutManager = PreloadLinearLayoutManager(this@WriteCodeActivity)
3737
adapter = recyclerViewDragDropManager.createWrappedAdapter(blockAdapter)
3838
itemAnimator = RefactoredDefaultItemAnimator()
3939
recyclerViewDragDropManager.attachRecyclerView(this)

app/src/main/kotlin/com/rayfantasy/icode/ui/fragment/MainFragment.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.rayfantasy.icode.ui.fragment
22

33
import android.os.Bundle
4-
import android.support.v7.widget.LinearLayoutManager
54
import android.view.LayoutInflater
65
import android.view.View
76
import android.view.ViewGroup
87
import com.android.volley.Request
98
import com.raizlabs.android.dbflow.sql.language.Select
109
import com.rayfantasy.icode.databinding.FragmentMainBinding
10+
import com.rayfantasy.icode.extra.PreloadLinearLayoutManager
1111
import com.rayfantasy.icode.model.ICodeTheme
1212
import com.rayfantasy.icode.postutil.PostUtil
1313
import com.rayfantasy.icode.postutil.bean.CodeGood
@@ -54,7 +54,7 @@ class MainFragment : FragmentBase() {
5454
}
5555

5656
private fun initRecyclerView() {
57-
val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
57+
val layoutManager = PreloadLinearLayoutManager(activity)
5858
view.recyclerView.layoutManager = layoutManager
5959
adapter = CodeListAdapter(activity, SetUniqueList.setUniqueList(getCacheData())) { loadCodeGoods(false) }
6060
view.recyclerView.adapter = adapter
@@ -77,13 +77,13 @@ class MainFragment : FragmentBase() {
7777
//如果结果为空,则表示没有更多内容了
7878
adapter.footerState = LoadMoreAdapter.FOOTER_STATE_NO_MORE
7979
} else {
80-
8180
if (refresh) {
8281
adapter.codeGoods.clear()
8382
}
8483
//否则将结果加入codeGoods,并刷新adapter
8584
adapter.codeGoods.addAll(it)
86-
adapter.notifyDataSetChanged()
85+
if (refresh) adapter.notifyDataSetChanged()
86+
else adapter.notifyItemRangeInserted(adapter.itemCount - 1 - it.size, it.size)
8787
cacheData(adapter.codeGoods)
8888
}
8989
/*}*/

0 commit comments

Comments
 (0)