@@ -6,27 +6,27 @@ import android.view.LayoutInflater
66import android.view.View
77import android.view.ViewGroup
88import com.android.volley.Request
9- import com.raizlabs.android.dbflow.sql.language.SQLite
9+ import com.raizlabs.android.dbflow.sql.language.Join
10+ import com.raizlabs.android.dbflow.sql.language.NameAlias
11+ import com.raizlabs.android.dbflow.sql.language.Select
1012import com.rayfantasy.icode.R
11- import com.rayfantasy.icode.databinding.FragmentMainBinding
12- import com.rayfantasy.icode.model.ICodeTheme
13+ import com.rayfantasy.icode.extra.UpdateAbleList
1314import com.rayfantasy.icode.postutil.PostUtil
1415import com.rayfantasy.icode.postutil.bean.CodeGood
1516import com.rayfantasy.icode.postutil.bean.CodeGood_Table
1617import com.rayfantasy.icode.postutil.bean.Favorite
1718import com.rayfantasy.icode.postutil.bean.Favorite_Table
1819import com.rayfantasy.icode.ui.adapter.CodeListAdapter
1920import com.rayfantasy.icode.ui.adapter.LoadMoreAdapter
20- import kotlinx.android.synthetic.main.fragment_favorite.*
2121import kotlinx.android.synthetic.main.fragment_favorite.view.*
22- import org.apache.commons.collections4.list.SetUniqueList
2322import org.jetbrains.anko.support.v4.onRefresh
2423
2524class FavoriteFragment : FragmentBase () {
2625 companion object {
2726 const val LOAD_ONCE = 10
2827 }
29- private lateinit var adapter: CodeListAdapter
28+
29+ private val adapter by lazy { CodeListAdapter (activity, UpdateAbleList (getCacheData())) { loadCodeGoods(false ) } }
3030 private val isRefreshing: Boolean
3131 get() = request != null
3232 private var request: Request <* >? = null
@@ -39,45 +39,45 @@ class FavoriteFragment : FragmentBase() {
3939 }
4040
4141 override fun onCreateView (inflater : LayoutInflater ? , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
42- return inflater?.inflate(R .layout.fragment_favorite,container,false )
42+ return inflater?.inflate(R .layout.fragment_favorite, container, false )
4343 }
4444
4545 private fun initRecyclerView () {
4646 val layoutManager = LinearLayoutManager (activity)
4747 view.favorite_recycler_view.layoutManager = layoutManager
48- adapter = CodeListAdapter (activity, SetUniqueList .setUniqueList(getCacheData())) { loadCodeGoods(false ) }
4948 view.favorite_recycler_view.adapter = adapter
5049 }
50+
5151 private fun loadCodeGoods (refresh : Boolean ) {
5252 // 如果正在刷新,则不再发起新的刷新请求
5353 if (isRefreshing)
5454 return
5555
5656 // 生成加载条件,目前加载3个,方便测试
57- if (PostUtil .user == null ){
57+ if (PostUtil .user == null ) {
5858 adapter.footerState = LoadMoreAdapter .FOOTER_STATE_FAILED
5959 return
6060 }
61- val condition = " SELECT a.* FROM icode.code_good a JOIN (SELECT * FROM icode. favorite WHERE userId = ${PostUtil .user!! .id} ) b on a.id = b.goodId ORDER BY b.createat"
61+ val condition = " JOIN (SELECT * FROM favorite WHERE userId = ${PostUtil .user!! .id} ) b on a.id = b.goodId ORDER BY b.createat DESC "
6262 request = PostUtil .selectCodeGood(condition) {
6363 onSuccess {
6464 if (isDetached) return @onSuccess
6565 view.favo_swipe.isRefreshing = false
6666 request = null
6767
68- if (it.isEmpty() ) {
68+ // if (it.isEmpty() ) {
6969 // 如果结果为空,则表示没有更多内容了
7070 adapter.footerState = LoadMoreAdapter .FOOTER_STATE_NO_MORE
71- } else {
71+ // } else {
7272 if (refresh) {
7373 adapter.codeGoods.clear()
7474 }
7575 // 否则将结果加入codeGoods,并刷新adapter
7676 adapter.codeGoods.addAll(it)
7777 if (refresh) adapter.notifyDataSetChanged()
78- else adapter.notifyItemRangeInserted(adapter.itemCount - 1 - it.size, it.size )
78+ else adapter.notifyDataSetChanged( )
7979 cacheData(adapter.codeGoods)
80- }
80+ // }
8181 onFailed { t, rc ->
8282 request = null
8383 if (isDetached || view == null ) return @onFailed
@@ -93,15 +93,20 @@ class FavoriteFragment : FragmentBase() {
9393 PostUtil .cancel(request)
9494 request = null
9595 }
96+
9697 fun cacheData (data : List <CodeGood >) {
9798 data.forEach {
9899 it.loadContentFromCache()
99100 it.save()
100101 }
101102 }
102- fun getCacheData () = SQLite .select(CodeGood_Table .id)
103- .from(CodeGood ::class .java).leftOuterJoin(Favorite ::class .java)
104- .on(CodeGood_Table .id.withTable().eq(Favorite_Table .goodId.withTable()))
103+
104+ fun getCacheData () = Select ()
105+ .from(CodeGood ::class .java).`as `(" a" )
106+ .join(Favorite ::class .java, Join .JoinType .CROSS ).`as `(" b" )
107+ .on(CodeGood_Table .id.withTable(NameAlias (" a" )).eq(Favorite_Table .goodId.withTable(NameAlias (" b" ))))
108+ .where(CodeGood_Table .id.withTable(NameAlias (" a" )).`is `(PostUtil .user!! .id))
109+ .orderBy(Favorite_Table .createat, false )
105110 .queryList()
106111
107112}
0 commit comments