YdlHomeAdapter.kt 11.5 KB
Newer Older
徐健 committed
1 2 3
package com.yidianling.home.adapter

import android.content.Context
范玉宾 committed
4 5
import android.graphics.Color
import android.media.MediaPlayer
徐健 committed
6 7 8
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
严久程 committed
9
import android.widget.ImageView
YKai committed
10
import androidx.recyclerview.widget.RecyclerView
严久程 committed
11
import com.ydl.ydl_image.module.GlideApp
徐健 committed
12
import com.yidianling.home.R
konghaorui committed
13
import com.yidianling.home.constract.HomeViewConfig
14
import com.yidianling.home.event.HomeImpl
徐健 committed
15 16
import com.yidianling.home.model.bean.*
import com.yidianling.home.ui.view.*
17 18
import com.yidianling.home.view.HomeMuseView
import kotlinx.android.synthetic.main.home_muse_view.view.*
徐健 committed
19

konghaorui committed
20

徐健 committed
21 22 23 24 25 26 27 28
/**
 * @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,
29
                     private var homeEvent: HomeImpl,
徐健 committed
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
                     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

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

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

徐健 committed
72
        this.list.addAll(list)
霍志良 committed
73
        this.listenFree= list[0]?.headerBean?.listenFree!!
徐健 committed
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
        //重置标记位
        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
90 91 92 93 94 95 96 97 98 99
    }
    /**
     * 更新倾诉免费标识
     */
    fun updateConfideFreeData(data: HomeHeaderBean?) {

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

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

徐健 committed
121 122 123
    }

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


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

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

                if (holder.viewType !=-1){
                    holder.pagerBannerView as HomePagerBannerView
                    holder.pagerBannerView.initData(headerBean)
                }
徐健 committed
205 206 207
            }
            //顶部预约专家,即时倾诉,心理课堂,心理测试按钮模块
            is HomeButtonBannerViewHolder -> {
霍志良 committed
208
                list[1].headerBean?.listenFree?.let { holder.buttonBannerView.setVisibilityFree(it) }
徐健 committed
209 210 211 212
            }
            //咨询模块
            is HomeConsultViewHolder -> {
                holder.consultView.setTitle(this.consultCategoryData, consultSelectPosition)
konghaorui committed
213
                holder.consultView.setConsultInfoView(list[holder.viewType].consultBean?.list,this.consultCategoryData?.get(consultSelectPosition))
徐健 committed
214 215 216 217 218
                consultPosition = position
            }
            //倾诉*排解模块
            is HomeConfideViewHolder -> {
                holder.confideViewView.setTitle(this.listenCategoryDate, confideSelectPosition)
konghaorui committed
219
                holder.confideViewView.setConfideExpertInfoView(list[holder.viewType].confideBean?.body)
徐健 committed
220 221 222 223
                confidePosition = position
            }
            //课程*成长模块
            is HomeCourseViewHolder -> {
konghaorui committed
224
                holder.courseViewView.initData(list[holder.viewType].courseBean?.list)
徐健 committed
225 226 227
            }
            //解忧*问答模块
            is HomeAssuageGriefViewHolder -> {
konghaorui committed
228
                holder.assuageGriefViewView.initData(position,list[holder.viewType].askBean?.data)
徐健 committed
229 230 231
            }
            //壹点*冥想模块
            is HomeMuseViewHolder -> {
范玉宾 committed
232 233 234 235 236 237 238 239 240

                holder.museViewView.video_view?.setOnInfoListener { mp, what, extra ->
                    if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){
                        holder.museViewView.video_view?.setBackgroundColor(Color.TRANSPARENT)
                    }
                    true
                }
                holder.museViewView.video_view?.start()

241
                holder.museViewView.initData(list[holder.viewType].meditationBean)
徐健 committed
242 243 244
            }
            //心灵*电台模块
            is HomeIntelligentViewHolder -> {
konghaorui committed
245
                holder.intelligentViewView.initData(list[holder.viewType].fmBean?.list)
徐健 committed
246 247 248
            }
            //文章*阅读模块
            is HomeArticleViewHolder -> {
konghaorui committed
249
                holder.articleViewView.initData(list[holder.viewType].articleBean?.list)
徐健 committed
250 251 252
            }
            //测试模块
            is HomeTestViewHolder -> {
konghaorui committed
253
                holder.testView.initData(list[holder.viewType].testListBean)
徐健 committed
254 255 256 257 258 259 260 261 262 263 264
            }
        }
    }

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

    /**
     * 顶部ViewPager与分类模块 ViewHolder
     */
konghaorui committed
265
    inner class HomePagerBannerViewHolder(val pagerBannerView: View,val viewType:Int) : RecyclerView.ViewHolder(pagerBannerView)
徐健 committed
266 267 268 269

    /**
     * 顶部预约专家,即时倾诉,心理测试按钮模块 ViewHolder
     */
konghaorui committed
270
    inner class HomeButtonBannerViewHolder(val buttonBannerView: HomeButtonBannerView,val viewType:Int) : RecyclerView.ViewHolder(buttonBannerView)
徐健 committed
271 272 273 274

    /**
     * 咨询模块 ViewHolder
     */
konghaorui committed
275
    inner class HomeConsultViewHolder(val consultView: HomeConsultView,val viewType:Int) : RecyclerView.ViewHolder(consultView)
徐健 committed
276 277 278 279

    /**
     * 倾诉*排解模块 ViewHolder
     */
konghaorui committed
280
    inner class HomeConfideViewHolder(val confideViewView: HomeConfideView,val viewType:Int) : RecyclerView.ViewHolder(confideViewView)
徐健 committed
281 282 283 284

    /**
     * 课程*成长模块 ViewHolder
     */
konghaorui committed
285
    inner class HomeCourseViewHolder(val courseViewView: HomeCourseView,val viewType:Int) : RecyclerView.ViewHolder(courseViewView)
徐健 committed
286 287 288 289

    /**
     * 测试模块 ViewHolder
     */
konghaorui committed
290
    inner class HomeTestViewHolder(val testView: HomeTestView,val viewType:Int) : RecyclerView.ViewHolder(testView)
徐健 committed
291 292 293 294

    /**
     * 解忧*问答模块 ViewHolder
     */
konghaorui committed
295
    inner class HomeAssuageGriefViewHolder(val assuageGriefViewView: HomeAssuageGriefView,val viewType:Int) : RecyclerView.ViewHolder(assuageGriefViewView)
徐健 committed
296 297 298 299

    /**
     * 心灵*电台模块 ViewHolder
     */
konghaorui committed
300
    inner class HomeIntelligentViewHolder(val intelligentViewView: HomeIntelligentView,val viewType:Int) : RecyclerView.ViewHolder(intelligentViewView)
徐健 committed
301 302 303 304

    /**
     * 文章*阅读模块 ViewHolder
     */
305
    inner class HomeMuseViewHolder(val museViewView: HomeMuseView, val viewType:Int) : RecyclerView.ViewHolder(museViewView)
徐健 committed
306 307 308 309

    /**
     * 文章*阅读模块 ViewHolder
     */
konghaorui committed
310
    inner class HomeArticleViewHolder(val articleViewView: HomeArticleView,val viewType:Int) : RecyclerView.ViewHolder(articleViewView)
徐健 committed
311 312 313 314

    /**
     * 底部提示语模块 ViewHolder
     */
严久程 committed
315 316 317 318 319
    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);
320 321 322
            imageLogoView?.let {
                GlideApp.with(mContext).load("https://static.yidianling.com/banner/bottombanner@2x.png").into(it);
            }
严久程 committed
323 324
        }
    }
徐健 committed
325
}