lmw
2024-10-23 2f204867ad034d3a95ba9acc112d6507f296447b
app/src/main/java/com/sinata/xqmuse/ui/course/CourseFragment.kt
@@ -1,156 +1,75 @@
package com.sinata.xqmuse.ui.course
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.activity.BaseActivity
import android.util.TypedValue
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import cn.sinata.xldutils.fragment.BaseFragment
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.visible
import com.sinata.xqmuse.R
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.entity.*
import com.sinata.xqmuse.network.requestByF
import com.sinata.xqmuse.ui.course.adapter.*
import com.sinata.xqmuse.ui.home.adapter.CourseAdapter
import com.sinata.xqmuse.ui.home.adapter.HomeBannerAdapter
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.clickDelay
import com.youth.banner.indicator.CircleIndicator
import kotlinx.android.synthetic.main.fragment_course.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.textColorResource
class CourseFragment : BaseFragment() {
    override fun contentViewId() = R.layout.fragment_course
    private val bannerImg = arrayListOf<Banner>()
//    private val bannerAdapter by lazy {
//        HomeBannerAdapter(bannerImg, requireContext())
//    }
    private val filterList = arrayListOf<Filter>()
    private val filterAdapter = FilterAdapter(filterList)
    private var page = 1
    var search: String? = null //搜索
    private val course = arrayListOf<Course>()
    private val courseAdapter = CourseAdapter(course)
    private val frags = arrayListOf<Fragment>()
    override fun onFirstVisibleToUser() {
        EventBus.getDefault().register(this)
//        banner.adapter = bannerAdapter
        banner.indicator = CircleIndicator(requireContext())
        rv_filter.layoutManager = LinearLayoutManager(requireContext())
        rv_filter.adapter = filterAdapter
        frags.add(PushCourseFragment())
        frags.add(TeacherFragment())
        view_pager.adapter = object :FragmentPagerAdapter(childFragmentManager){
            override fun getCount() = 2
        rv_course.layoutManager = LinearLayoutManager(requireContext())
        rv_course.adapter = courseAdapter
        courseAdapter.setOnItemClickListener { view, position ->
            startActivity<CourseDetailActivity>("id" to course[position].id)
            override fun getItem(position: Int) = frags[position]
            override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
            }
        }
        view_pager.offscreenPageLimit = 2
        cb_pub.setOnClickListener {
            view_pager.currentItem = 0
        }
        cb_teacher.setOnClickListener {
            view_pager.currentItem = 1
        }
        view_pager.setOnPageChangeListener(object :ViewPager.OnPageChangeListener{
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
        }
        tv_my_course.setOnClickListener {
            startActivity<MyCourseActivity>()
            override fun onPageSelected(position: Int) {
                checkTab(position)
        }
        tv_search.clickDelay {
            val s = et_search.text.toString()
            search = if (s.isNullOrEmpty()) null else s
            (requireActivity() as BaseActivity).hideInputMethod()
            refreshLayout.autoRefresh()
            override fun onPageScrollStateChanged(state: Int) {
            }
        })
        }
        refreshLayout.setOnRefreshListener {
            val s = et_search.text.toString()
            search = if (s.isNullOrEmpty()) null else s
            page = 1
            getData()
    private fun checkTab(i: Int){
        if (i == 0){
            cb_pub.textColorResource = R.color.textColor
            cb_pub.setTextSize(TypedValue.COMPLEX_UNIT_SP,21f)
            iv_tab_1.visible()
            cb_teacher.textColorResource = R.color.textColor99
            cb_teacher.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
            iv_tab_2.gone()
        }else{
            cb_teacher.textColorResource = R.color.textColor
            cb_teacher.setTextSize(TypedValue.COMPLEX_UNIT_SP,21f)
            iv_tab_2.visible()
            cb_pub.textColorResource = R.color.textColor99
            cb_pub.setTextSize(TypedValue.COMPLEX_UNIT_SP,16f)
            iv_tab_1.gone()
        }
        refreshLayout.setOnLoadMoreListener {
            page++
            getData()
        }
        banner.setOnBannerListener { data, position ->
            val banner = data as Banner
            banner.jumpPage(requireContext())
        }
        getImg()
        getFilter()
        page = 1
        getData()
    }
    private fun getFilter() {
        HttpManager.getList().requestByF(this){_, data->
            filterList.clear()
            filterList.add(Filter("类型:",data?.fitnessType?: arrayListOf()))
            filterList.add(Filter("部位:",data?.fitnessPosition?: arrayListOf()))
            val diff = arrayListOf<FilterItem>()
            diff.add(FilterItem(1,"H1"))
            diff.add(FilterItem(2,"H2"))
            diff.add(FilterItem(3,"H3"))
            diff.add(FilterItem(4,"H4"))
            diff.add(FilterItem(5,"H5"))
            filterList.add(Filter("难度:",diff))
            val times = arrayListOf<FilterItem>()
            times.add(FilterItem(1,"小于10分钟"))
            times.add(FilterItem(2,"10-20分钟"))
            times.add(FilterItem(3,"大于20分钟"))
            filterList.add(Filter("时长:",times))
            filterAdapter.notifyDataSetChanged()
        }
    }
    private fun getData() {
        val diff = filterList.filter { it.name == "难度:" }.firstOrNull()?.list?.filter { it.checked }?.joinToString (","){ it.id.toString() }
        val position = filterList.filter { it.name == "部位:" }.firstOrNull()?.list?.filter { it.checked }?.joinToString (","){ it.name }
        val times = filterList.filter { it.name == "时长:" }.firstOrNull()?.list?.filter { it.checked }?.joinToString (","){ it.id.toString() }
        val types = filterList.filter { it.name == "类型:" }.firstOrNull()?.list?.filter { it.checked }?.joinToString (","){ it.id.toString() }
        HttpManager.queryCourseList(page,if (diff.isNullOrEmpty()) null else diff,
            if (position.isNullOrEmpty()) null else position,if (times.isNullOrEmpty()) null else times,
            if (types.isNullOrEmpty()) null else types,search).requestByF(this,success = {_,data->
            if (page == 1)
                course.clear()
            course.addAll(data?: arrayListOf())
            courseAdapter.notifyDataSetChanged()
            if (course.isEmpty())
                refreshLayout.finishRefreshWithNoMoreData()
            else if (data.isNullOrEmpty())
                refreshLayout.finishLoadMoreWithNoMoreData()
            else if (page == 1)
                refreshLayout.finishRefresh()
            else
                refreshLayout.finishLoadMore()
        }){_,_->
            if (page == 1)
                refreshLayout.finishRefresh(false)
            else
                refreshLayout.finishLoadMore(false)
        }
    }
    private fun getImg(){
        HttpManager.queryBanner().requestByF(this){ _, data->
            bannerImg.clear()
            bannerImg.addAll(data?: arrayListOf())
//            bannerAdapter.notifyDataSetChanged()
            banner.currentItem = 1
        }
    }
    @Subscribe
    fun refresh(e:EmptyEvent){
        if (e.code == Const.EventCode.REFRESH_COURSE){
            refreshLayout.resetNoMoreData()
            page = 1
            getData()
        }
    }
    override fun onDestroy() {
        super.onDestroy()
        EventBus.getDefault().unregister(this)
    }
}