YdlHomeAdapter.kt 10.6 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.home.R
konghaorui committed
11
import com.yidianling.home.constract.HomeViewConfig
12
import com.yidianling.home.event.HomeImpl
徐健 committed
13 14 15
import com.yidianling.home.model.bean.*
import com.yidianling.home.ui.view.*

konghaorui committed
16

徐健 committed
17 18 19 20 21 22 23 24
/**
 * @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,
25
                     private var homeEvent: HomeImpl,
徐健 committed
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
                     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

    fun updateItems(list: MutableList<HomePagerDataBean>) {
        if (null == this.list || this.list!!.isEmpty()) {
            this.list = ArrayList()
        } else {
            this.list.clear()
        }
        this.list.addAll(list)
        //重置标记位
        confidePosition = -1
        consultPosition = -1
        notifyDataSetChanged()
    }

    /**
     * 更新倾诉模块数据
     */
    fun updateConfideData(data: HomeConfideBean, selectPosition: Int) {
        if (confidePosition == -1) {
            return
        }
        list[confidePosition].confideBean = data
        this.confideSelectPosition = selectPosition
        notifyItemChanged(confidePosition)
    }

    /**
     * 更新咨询模块数据
     */
    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)
    }

    override fun getItemViewType(position: Int): Int {
        if (position < list.size) {
            return list[position].type!!
        } else {
konghaorui committed
109
            return -1
徐健 committed
110 111 112 113
        }
    }


YKai committed
114
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
徐健 committed
115 116
        when (viewType) {
            //顶部ViewPager与分类模块
konghaorui committed
117 118 119 120 121 122 123 124 125 126
            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
127 128
            }
            //咨询模块
konghaorui committed
129 130
            HomeViewConfig.getOrder().consultIndex -> {
                return HomeConsultViewHolder(HomeConsultView(mContext, homeEvent),viewType)
徐健 committed
131 132
            }
            //顶部预约专家,即时倾诉,心理测试按钮模块
konghaorui committed
133 134
            HomeViewConfig.getOrder().buttonIndex -> {
                return HomeButtonBannerViewHolder(HomeButtonBannerView(mContext, homeEvent),viewType)
徐健 committed
135 136
            }
            //倾诉*排解模块
konghaorui committed
137 138
            HomeViewConfig.getOrder().confideIndex -> {
                return HomeConfideViewHolder(HomeConfideView(mContext, homeEvent),viewType)
徐健 committed
139 140
            }
            //课程*成长模块
konghaorui committed
141 142
            HomeViewConfig.getOrder().courseIndex -> {
                return HomeCourseViewHolder(HomeCourseView(mContext, homeEvent),viewType)
徐健 committed
143 144
            }
            //解忧*问答模块
konghaorui committed
145 146
            HomeViewConfig.getOrder().dynamicIndex -> {
                return HomeAssuageGriefViewHolder(HomeAssuageGriefView(mContext, homeEvent),viewType)
徐健 committed
147 148
            }
            //测试模块
149
            HomeViewConfig.getOrder().testsIndex -> {
konghaorui committed
150
                return HomeTestViewHolder(HomeTestView(mContext, homeEvent),viewType)
徐健 committed
151 152
            }
            //心灵*电台模块
konghaorui committed
153 154
            HomeViewConfig.getOrder().fmIndex -> {
                return HomeIntelligentViewHolder(HomeIntelligentView(mContext, homeEvent),viewType)
徐健 committed
155 156
            }
            //文章*阅读模块
konghaorui committed
157 158
            HomeViewConfig.getOrder().articleIndex -> {
                return HomeArticleViewHolder(HomeArticleView(mContext, homeEvent),viewType)
徐健 committed
159 160
            }
            //壹点*冥想模块
konghaorui committed
161 162
            HomeViewConfig.getOrder().museIndex -> {
                return HomeMuseViewHolder(HomeMuseView(mContext, homeEvent),viewType)
徐健 committed
163 164 165
            }
            //底部提示语模块
            else -> {
konghaorui committed
166
                val view = mInflater.inflate(R.layout.home_footer_view, parent, false)
konghaorui committed
167
                return FooterViewViewHolder(view,viewType)
徐健 committed
168 169 170 171 172 173 174 175
            }
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder) {
            //顶部ViewPager与分类模块
            is HomePagerBannerViewHolder -> {
konghaorui committed
176 177
                var tempIndex =  if (holder.viewType==-1) 0 else holder.viewType
                var headerBean = list[tempIndex].headerBean;
徐健 committed
178 179
                this.consultCategoryData = headerBean?.consultCategoryData
                this.listenCategoryDate = headerBean?.listenCategoryDate
konghaorui committed
180 181 182 183 184

                if (holder.viewType !=-1){
                    holder.pagerBannerView as HomePagerBannerView
                    holder.pagerBannerView.initData(headerBean)
                }
徐健 committed
185 186 187 188 189 190 191
            }
            //顶部预约专家,即时倾诉,心理课堂,心理测试按钮模块
            is HomeButtonBannerViewHolder -> {
            }
            //咨询模块
            is HomeConsultViewHolder -> {
                holder.consultView.setTitle(this.consultCategoryData, consultSelectPosition)
konghaorui committed
192
                holder.consultView.setConsultInfoView(list[holder.viewType].consultBean?.list,this.consultCategoryData?.get(consultSelectPosition))
徐健 committed
193 194 195 196 197
                consultPosition = position
            }
            //倾诉*排解模块
            is HomeConfideViewHolder -> {
                holder.confideViewView.setTitle(this.listenCategoryDate, confideSelectPosition)
konghaorui committed
198
                holder.confideViewView.setConfideExpertInfoView(list[holder.viewType].confideBean?.body)
徐健 committed
199 200 201 202
                confidePosition = position
            }
            //课程*成长模块
            is HomeCourseViewHolder -> {
konghaorui committed
203
                holder.courseViewView.initData(list[holder.viewType].courseBean?.list)
徐健 committed
204 205 206
            }
            //解忧*问答模块
            is HomeAssuageGriefViewHolder -> {
konghaorui committed
207
                holder.assuageGriefViewView.initData(position,list[holder.viewType].askBean?.data)
徐健 committed
208 209 210
            }
            //壹点*冥想模块
            is HomeMuseViewHolder -> {
konghaorui committed
211
                holder.museViewView.initData(list[holder.viewType].museBean)
徐健 committed
212 213 214
            }
            //心灵*电台模块
            is HomeIntelligentViewHolder -> {
konghaorui committed
215
                holder.intelligentViewView.initData(list[holder.viewType].fmBean?.list)
徐健 committed
216 217 218
            }
            //文章*阅读模块
            is HomeArticleViewHolder -> {
konghaorui committed
219
                holder.articleViewView.initData(list[holder.viewType].articleBean?.list)
徐健 committed
220 221 222
            }
            //测试模块
            is HomeTestViewHolder -> {
konghaorui committed
223
                holder.testView.initData(list[holder.viewType].testListBean)
徐健 committed
224 225 226 227 228 229 230 231 232 233 234
            }
        }
    }

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

    /**
     * 顶部ViewPager与分类模块 ViewHolder
     */
konghaorui committed
235
    inner class HomePagerBannerViewHolder(val pagerBannerView: View,val viewType:Int) : RecyclerView.ViewHolder(pagerBannerView)
徐健 committed
236 237 238 239

    /**
     * 顶部预约专家,即时倾诉,心理测试按钮模块 ViewHolder
     */
konghaorui committed
240
    inner class HomeButtonBannerViewHolder(val buttonBannerView: HomeButtonBannerView,val viewType:Int) : RecyclerView.ViewHolder(buttonBannerView)
徐健 committed
241 242 243 244

    /**
     * 咨询模块 ViewHolder
     */
konghaorui committed
245
    inner class HomeConsultViewHolder(val consultView: HomeConsultView,val viewType:Int) : RecyclerView.ViewHolder(consultView)
徐健 committed
246 247 248 249

    /**
     * 倾诉*排解模块 ViewHolder
     */
konghaorui committed
250
    inner class HomeConfideViewHolder(val confideViewView: HomeConfideView,val viewType:Int) : RecyclerView.ViewHolder(confideViewView)
徐健 committed
251 252 253 254

    /**
     * 课程*成长模块 ViewHolder
     */
konghaorui committed
255
    inner class HomeCourseViewHolder(val courseViewView: HomeCourseView,val viewType:Int) : RecyclerView.ViewHolder(courseViewView)
徐健 committed
256 257 258 259

    /**
     * 测试模块 ViewHolder
     */
konghaorui committed
260
    inner class HomeTestViewHolder(val testView: HomeTestView,val viewType:Int) : RecyclerView.ViewHolder(testView)
徐健 committed
261 262 263 264

    /**
     * 解忧*问答模块 ViewHolder
     */
konghaorui committed
265
    inner class HomeAssuageGriefViewHolder(val assuageGriefViewView: HomeAssuageGriefView,val viewType:Int) : RecyclerView.ViewHolder(assuageGriefViewView)
徐健 committed
266 267 268 269

    /**
     * 心灵*电台模块 ViewHolder
     */
konghaorui committed
270
    inner class HomeIntelligentViewHolder(val intelligentViewView: HomeIntelligentView,val viewType:Int) : RecyclerView.ViewHolder(intelligentViewView)
徐健 committed
271 272 273 274

    /**
     * 文章*阅读模块 ViewHolder
     */
konghaorui committed
275
    inner class HomeMuseViewHolder(val museViewView: HomeMuseView,val viewType:Int) : RecyclerView.ViewHolder(museViewView)
徐健 committed
276 277 278 279

    /**
     * 文章*阅读模块 ViewHolder
     */
konghaorui committed
280
    inner class HomeArticleViewHolder(val articleViewView: HomeArticleView,val viewType:Int) : RecyclerView.ViewHolder(articleViewView)
徐健 committed
281 282 283 284

    /**
     * 底部提示语模块 ViewHolder
     */
严久程 committed
285 286 287 288 289
    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);
290 291 292
            imageLogoView?.let {
                GlideApp.with(mContext).load("https://static.yidianling.com/banner/bottombanner@2x.png").into(it);
            }
严久程 committed
293 294
        }
    }
徐健 committed
295
}