lmw
2024-07-16 935a87b3578806ca37fee37f03da8c419a3896ce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package com.dollearn.student.ui.shop
 
import android.content.Context
import android.view.inputmethod.InputMethodManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.fragment.BaseFragment
import com.dollearn.student.MainActivity
import com.dollearn.student.R
import com.dollearn.student.network.HttpManager
import com.dollearn.student.network.entity.Goods
import com.dollearn.student.network.entity.GoodsType
import com.dollearn.student.network.requestByF
import com.dollearn.student.ui.shop.adapter.GoodsAdapter
import com.dollearn.student.ui.shop.adapter.GoodsTypeAdapter
import com.dollearn.student.utils.Const
import com.dollearn.student.utils.event.EmptyEvent
import kotlinx.android.synthetic.main.fragment_shop.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.support.v4.startActivity
 
class ShopFragment : BaseFragment() {
    override fun contentViewId() = R.layout.fragment_shop
 
    private val goodsTypes = arrayListOf<GoodsType>()
    private val typeAdapter = GoodsTypeAdapter(goodsTypes)
    private var page = 1
    private var search:String? = null
    private val goods = arrayListOf<Goods>()
    private val adapter = GoodsAdapter(goods)
 
    override fun onFirstVisibleToUser() {
        rv_type.layoutManager = LinearLayoutManager(requireContext(),LinearLayoutManager.HORIZONTAL,false)
        rv_type.adapter = typeAdapter
        rv_goods.layoutManager = GridLayoutManager(requireContext(),4)
        rv_goods.adapter = adapter
        refreshLayout.setOnRefreshListener {
            page = 1
            getGoods()
        }
        refreshLayout.setOnLoadMoreListener {
            page++
            getGoods()
        }
 
        typeAdapter.setOnItemClickListener { view, position ->
            if (refreshLayout.isRefreshing)
                return@setOnItemClickListener
            goodsTypes[position].checked = !goodsTypes[position].checked
            typeAdapter.notifyItemChanged(position)
            refreshLayout.autoRefresh()
        }
 
        adapter.setOnItemClickListener { view, position ->
            startActivity<GoodsDetailActivity>("id" to goods[position].id)
        }
 
        tv_search.setOnClickListener {
            (requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
                .hideSoftInputFromWindow(requireActivity().currentFocus!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
            if (refreshLayout.isRefreshing)
                return@setOnClickListener
            search = et_search.text.toString()
            if (search.isNullOrEmpty())
                search = null
            refreshLayout.autoRefresh()
        }
        tv_score.text = ((activity as MainActivity).score).toString()
        getTypes()
        refreshLayout.autoRefresh()
        EventBus.getDefault().register(this)
    }
 
    private fun getTypes() {
        HttpManager.goodTypeStudy().requestByF(this){_,data->
            goodsTypes.clear()
            goodsTypes.addAll(data?: arrayListOf())
            typeAdapter.notifyDataSetChanged()
        }
    }
 
    private fun getGoods(){
        HttpManager.goodListStudy(page,search,goodsTypes.filter { it.checked }.map { it.id.toString() }).requestByF(this,success = {_,data->
            if (page == 1)
                goods.clear()
            goods.addAll(data ?.records?: arrayListOf())
            adapter.notifyDataSetChanged()
            if (goods.isEmpty())
                refreshLayout.finishRefreshWithNoMoreData()
            else if (data ?.records.isNullOrEmpty())
                refreshLayout.finishLoadMoreWithNoMoreData()
            else if (page == 1)
                refreshLayout.finishRefresh()
            else
                refreshLayout.finishLoadMore()
        }){_,_->
            if (page == 1)
                refreshLayout.finishRefresh(false)
            else
                refreshLayout.finishLoadMore(false)
            page--
        }
    }
 
    @Subscribe
    fun refreshScore(e:EmptyEvent){
        if (e.code == Const.EventCode.REFRESH_SCORE){
            tv_score.text = ((activity as MainActivity).score).toString()
        }
    }
 
    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }
}