YdlHomeAdapter.kt 11.1 KB
Newer Older
徐健 committed
1 2 3 4 5 6
package com.yidianling.home.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
严久程 committed
7
import android.widget.ImageView
YKai committed
8
import androidx.recyclerview.widget.RecyclerView
严久程 committed
9
import com.ydl.ydl_image.module.GlideApp
霍志良 committed
10
import com.yidianling.common.tools.LogUtil
徐健 committed
11
import com.yidianling.home.R
konghaorui committed
12
import com.yidianling.home.constract.HomeViewConfig
13
import com.yidianling.home.event.HomeImpl
徐健 committed
14 15
import com.yidianling.home.model.bean.*
import com.yidianling.home.ui.view.*
霍志良 committed
16
import kotlin.properties.Delegates
徐健 committed
17

konghaorui committed
18

徐健 committed
19 20 21 22 23 24 25 26
/**
 * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a>
 * @描述: 壹点零首页适配器
 * @Copyright Copyright (c) 2019
 * @Company 壹点灵
 * @date 2019/02/13
 */
class YdlHomeAdapter(private val mContext: Context,
27
                     private var homeEvent: HomeImpl,
徐健 committed
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
                     private var list: ArrayList<HomePagerDataBean>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private val mInflater: LayoutInflater = LayoutInflater.from(mContext)
    /**
     * 倾述item的position
     *
     */
    private var confidePosition = -1

    /**
     * 咨询条目 position
     */
    private var consultPosition = -1

    /**
     * 倾述模块中tab上次选中的下标
     */
    var confideSelectPosition = 0

    /**
     * 咨询模块中tab上次选中的下标
     */
    var consultSelectPosition = 0

    /**
     * 倾诉分类 缓存
     */
    var listenCategoryDate: List<HomeHeaderBean.ListenCategoryDateBean>? = null

    /**
     * 咨询分类 缓存
     */
    var consultCategoryData: List<HomeHeaderBean.ConsultCategoryDateBean>? = null

62 63 64
    /*
    倾诉免费标识
    * */
霍志良 committed
65
    var listenFree :Boolean?=false
66

徐健 committed
67
    fun updateItems(list: MutableList<HomePagerDataBean>) {
霍志良 committed
68 69
        this.list.clear()

徐健 committed
70
        this.list.addAll(list)
霍志良 committed
71
        this.listenFree= list[0]?.headerBean?.listenFree!!
徐健 committed
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        //重置标记位
        confidePosition = -1
        consultPosition = -1
        notifyDataSetChanged()
    }

    /**
     * 更新倾诉模块数据
     */
    fun updateConfideData(data: HomeConfideBean, selectPosition: Int) {
        if (confidePosition == -1) {
            return
        }
        list[confidePosition].confideBean = data
        this.confideSelectPosition = selectPosition
        notifyItemChanged(confidePosition)
霍志良 committed
88 89 90 91 92 93 94 95 96 97
    }
    /**
     * 更新倾诉免费标识
     */
    fun updateConfideFreeData(data: HomeHeaderBean?) {

        if (data!=null){
            list[1].headerBean = data
        }
        notifyItemChanged(1)
徐健 committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
    }

    /**
     * 更新咨询模块数据
     */
    fun updateConsultData(data: HomeConsultBean, selectPosition: Int) {
        if (consultPosition == -1) {
            return
        }
        list[consultPosition].consultBean = data
        this.consultSelectPosition = selectPosition
        notifyItemChanged(consultPosition)
    }

    /**
     * 更新问答模块数据
     */
    fun updateAskData(data: HomeAskBean, position: Int) {
        list[position].askBean = data
//        notifyItemChanged(position)
霍志良 committed
118

徐健 committed
119 120 121 122 123 124
    }

    override fun getItemViewType(position: Int): Int {
        if (position < list.size) {
            return list[position].type!!
        } else {
konghaorui committed
125
            return -1
徐健 committed
126 127 128 129
        }
    }


YKai committed
130
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
徐健 committed
131 132
        when (viewType) {
            //顶部ViewPager与分类模块
konghaorui committed
133 134 135 136 137 138 139 140 141 142
            HomeViewConfig.getOrder().bannerIndex -> {
                if (viewType == -1){
                    //空布局
                    val view = View(mContext)
                    val layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,1)
                    view.layoutParams = layoutParams
                    view.visibility = View.GONE
                    return HomePagerBannerViewHolder(view,viewType)
                }
                return HomePagerBannerViewHolder(HomePagerBannerView(mContext, homeEvent),viewType)
徐健 committed
143 144
            }
            //咨询模块
konghaorui committed
145 146
            HomeViewConfig.getOrder().consultIndex -> {
                return HomeConsultViewHolder(HomeConsultView(mContext, homeEvent),viewType)
徐健 committed
147 148
            }
            //顶部预约专家,即时倾诉,心理测试按钮模块
konghaorui committed
149
            HomeViewConfig.getOrder().buttonIndex -> {
150 151 152
                return HomeButtonBannerViewHolder(HomeButtonBannerView(mContext, homeEvent,
                    listenFree!!
                ),viewType)
徐健 committed
153 154
            }
            //倾诉*排解模块
konghaorui committed
155 156
            HomeViewConfig.getOrder().confideIndex -> {
                return HomeConfideViewHolder(HomeConfideView(mContext, homeEvent),viewType)
徐健 committed
157 158
            }
            //课程*成长模块
konghaorui committed
159 160
            HomeViewConfig.getOrder().courseIndex -> {
                return HomeCourseViewHolder(HomeCourseView(mContext, homeEvent),viewType)
徐健 committed
161 162
            }
            //解忧*问答模块
konghaorui committed
163 164
            HomeViewConfig.getOrder().dynamicIndex -> {
                return HomeAssuageGriefViewHolder(HomeAssuageGriefView(mContext, homeEvent),viewType)
徐健 committed
165 166
            }
            //测试模块
167
            HomeViewConfig.getOrder().testsIndex -> {
konghaorui committed
168
                return HomeTestViewHolder(HomeTestView(mContext, homeEvent),viewType)
徐健 committed
169 170
            }
            //心灵*电台模块
konghaorui committed
171 172
            HomeViewConfig.getOrder().fmIndex -> {
                return HomeIntelligentViewHolder(HomeIntelligentView(mContext, homeEvent),viewType)
徐健 committed
173 174
            }
            //文章*阅读模块
konghaorui committed
175 176
            HomeViewConfig.getOrder().articleIndex -> {
                return HomeArticleViewHolder(HomeArticleView(mContext, homeEvent),viewType)
徐健 committed
177 178
            }
            //壹点*冥想模块
konghaorui committed
179 180
            HomeViewConfig.getOrder().museIndex -> {
                return HomeMuseViewHolder(HomeMuseView(mContext, homeEvent),viewType)
徐健 committed
181 182 183
            }
            //底部提示语模块
            else -> {
konghaorui committed
184
                val view = mInflater.inflate(R.layout.home_footer_view, parent, false)
konghaorui committed
185
                return FooterViewViewHolder(view,viewType)
徐健 committed
186 187 188 189 190 191 192 193
            }
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder) {
            //顶部ViewPager与分类模块
            is HomePagerBannerViewHolder -> {
konghaorui committed
194 195
                var tempIndex =  if (holder.viewType==-1) 0 else holder.viewType
                var headerBean = list[tempIndex].headerBean;
徐健 committed
196 197
                this.consultCategoryData = headerBean?.consultCategoryData
                this.listenCategoryDate = headerBean?.listenCategoryDate
konghaorui committed
198 199 200 201 202

                if (holder.viewType !=-1){
                    holder.pagerBannerView as HomePagerBannerView
                    holder.pagerBannerView.initData(headerBean)
                }
徐健 committed
203 204 205
            }
            //顶部预约专家,即时倾诉,心理课堂,心理测试按钮模块
            is HomeButtonBannerViewHolder -> {
霍志良 committed
206
                list[1].headerBean?.listenFree?.let { holder.buttonBannerView.setVisibilityFree(it) }
徐健 committed
207 208 209 210
            }
            //咨询模块
            is HomeConsultViewHolder -> {
                holder.consultView.setTitle(this.consultCategoryData, consultSelectPosition)
konghaorui committed
211
                holder.consultView.setConsultInfoView(list[holder.viewType].consultBean?.list,this.consultCategoryData?.get(consultSelectPosition))
徐健 committed
212 213 214 215 216
                consultPosition = position
            }
            //倾诉*排解模块
            is HomeConfideViewHolder -> {
                holder.confideViewView.setTitle(this.listenCategoryDate, confideSelectPosition)
konghaorui committed
217
                holder.confideViewView.setConfideExpertInfoView(list[holder.viewType].confideBean?.body)
徐健 committed
218 219 220 221
                confidePosition = position
            }
            //课程*成长模块
            is HomeCourseViewHolder -> {
konghaorui committed
222
                holder.courseViewView.initData(list[holder.viewType].courseBean?.list)
徐健 committed
223 224 225
            }
            //解忧*问答模块
            is HomeAssuageGriefViewHolder -> {
konghaorui committed
226
                holder.assuageGriefViewView.initData(position,list[holder.viewType].askBean?.data)
徐健 committed
227 228 229
            }
            //壹点*冥想模块
            is HomeMuseViewHolder -> {
konghaorui committed
230
                holder.museViewView.initData(list[holder.viewType].museBean)
徐健 committed
231 232 233
            }
            //心灵*电台模块
            is HomeIntelligentViewHolder -> {
konghaorui committed
234
                holder.intelligentViewView.initData(list[holder.viewType].fmBean?.list)
徐健 committed
235 236 237
            }
            //文章*阅读模块
            is HomeArticleViewHolder -> {
konghaorui committed
238
                holder.articleViewView.initData(list[holder.viewType].articleBean?.list)
徐健 committed
239 240 241
            }
            //测试模块
            is HomeTestViewHolder -> {
konghaorui committed
242
                holder.testView.initData(list[holder.viewType].testListBean)
徐健 committed
243 244 245 246 247 248 249 250 251 252 253
            }
        }
    }

    override fun getItemCount(): Int {
        return list.size
    }

    /**
     * 顶部ViewPager与分类模块 ViewHolder
     */
konghaorui committed
254
    inner class HomePagerBannerViewHolder(val pagerBannerView: View,val viewType:Int) : RecyclerView.ViewHolder(pagerBannerView)
徐健 committed
255 256 257 258

    /**
     * 顶部预约专家,即时倾诉,心理测试按钮模块 ViewHolder
     */
konghaorui committed
259
    inner class HomeButtonBannerViewHolder(val buttonBannerView: HomeButtonBannerView,val viewType:Int) : RecyclerView.ViewHolder(buttonBannerView)
徐健 committed
260 261 262 263

    /**
     * 咨询模块 ViewHolder
     */
konghaorui committed
264
    inner class HomeConsultViewHolder(val consultView: HomeConsultView,val viewType:Int) : RecyclerView.ViewHolder(consultView)
徐健 committed
265 266 267 268

    /**
     * 倾诉*排解模块 ViewHolder
     */
konghaorui committed
269
    inner class HomeConfideViewHolder(val confideViewView: HomeConfideView,val viewType:Int) : RecyclerView.ViewHolder(confideViewView)
徐健 committed
270 271 272 273

    /**
     * 课程*成长模块 ViewHolder
     */
konghaorui committed
274
    inner class HomeCourseViewHolder(val courseViewView: HomeCourseView,val viewType:Int) : RecyclerView.ViewHolder(courseViewView)
徐健 committed
275 276 277 278

    /**
     * 测试模块 ViewHolder
     */
konghaorui committed
279
    inner class HomeTestViewHolder(val testView: HomeTestView,val viewType:Int) : RecyclerView.ViewHolder(testView)
徐健 committed
280 281 282 283

    /**
     * 解忧*问答模块 ViewHolder
     */
konghaorui committed
284
    inner class HomeAssuageGriefViewHolder(val assuageGriefViewView: HomeAssuageGriefView,val viewType:Int) : RecyclerView.ViewHolder(assuageGriefViewView)
徐健 committed
285 286 287 288

    /**
     * 心灵*电台模块 ViewHolder
     */
konghaorui committed
289
    inner class HomeIntelligentViewHolder(val intelligentViewView: HomeIntelligentView,val viewType:Int) : RecyclerView.ViewHolder(intelligentViewView)
徐健 committed
290 291 292 293

    /**
     * 文章*阅读模块 ViewHolder
     */
konghaorui committed
294
    inner class HomeMuseViewHolder(val museViewView: HomeMuseView,val viewType:Int) : RecyclerView.ViewHolder(museViewView)
徐健 committed
295 296 297 298

    /**
     * 文章*阅读模块 ViewHolder
     */
konghaorui committed
299
    inner class HomeArticleViewHolder(val articleViewView: HomeArticleView,val viewType:Int) : RecyclerView.ViewHolder(articleViewView)
徐健 committed
300 301 302 303

    /**
     * 底部提示语模块 ViewHolder
     */
严久程 committed
304 305 306 307 308
    inner class FooterViewViewHolder(val footerView: View,val viewType:Int) : RecyclerView.ViewHolder(footerView){
        var imageLogoView:ImageView?=null

        init {
            imageLogoView=footerView.findViewById(R.id.iv_logo_view);
309 310 311
            imageLogoView?.let {
                GlideApp.with(mContext).load("https://static.yidianling.com/banner/bottombanner@2x.png").into(it);
            }
严久程 committed
312 313
        }
    }
徐健 committed
314
}