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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 底部提示语模块 ViewHolder
     */
严久程 committed
305 306 307 308 309
    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);
310 311 312
            imageLogoView?.let {
                GlideApp.with(mContext).load("https://static.yidianling.com/banner/bottombanner@2x.png").into(it);
            }
严久程 committed
313 314
        }
    }
徐健 committed
315
}