Commit e4ed1517 by upwork.021

feat: 排序代码提交

parent 54348d30
...@@ -21,9 +21,9 @@ import java.util.List; ...@@ -21,9 +21,9 @@ import java.util.List;
public final class DemoGlobalConfig implements IConfigModule { public final class DemoGlobalConfig implements IConfigModule {
String APP_DOMAIN = "https://api.github.com/"; String APP_DOMAIN = "https://api.github.com/";
// public static String appEnv = YDLConstants.ENV_AUTO_TEST; // public static String appEnv = YDLConstants.ENV_AUTO_TEST;
// public static String appEnv = YDLConstants.ENV_TEST; public static String appEnv = YDLConstants.ENV_TEST;
// public static String appEnv = YDLConstants.ENV_NEW_TEST;//配置未上传到maven库 // public static String appEnv = YDLConstants.ENV_NEW_TEST;//配置未上传到maven库
public static String appEnv = YDLConstants.ENV_PROD; // public static String appEnv = YDLConstants.ENV_PROD;
@Override @Override
public void injectAppLifecycle(@NotNull Context context, @NotNull List<IAppLifecycles> lifecycles) { public void injectAppLifecycle(@NotNull Context context, @NotNull List<IAppLifecycles> lifecycles) {
lifecycles.add(new DemoAppLifecycles()); lifecycles.add(new DemoAppLifecycles());
......
...@@ -68,7 +68,7 @@ dependencies { ...@@ -68,7 +68,7 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
kapt 'com.alibaba:arouter-compiler:1.2.2' kapt 'com.alibaba:arouter-compiler:1.2.2'
implementation rootProject.ext.dependencies["BaseRecyclerViewAdapterHelper"]
api rootProject.ext.dependencies["ydl-user-router"] api rootProject.ext.dependencies["ydl-user-router"]
if (rootProject.ext.dev_mode){ if (rootProject.ext.dev_mode){
//开发时使用 //开发时使用
......
...@@ -177,8 +177,8 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -177,8 +177,8 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
private val allFilter = AllFilter() //当前筛选 private val allFilter = AllFilter() //当前筛选
private val tempFilter = AllFilter() //临时筛选,未确认状态 private val tempFilter = AllFilter() //临时筛选,未确认状态
private var curPage = 1 private var curPage = 1
private val doctorList = ArrayList<DoctorServiceItem>() private val doctorList = ArrayList<ExpertServiceItem>()
private val serviceList = ArrayList<DoctorServiceItem>() private val serviceList = ArrayList<ExpertServiceItem>()
private var hasMore = true private var hasMore = true
private var initCategory = "0" private var initCategory = "0"
private var initShowType: Int = 1 private var initShowType: Int = 1
...@@ -331,8 +331,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -331,8 +331,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) { override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) {
if (hasMore) { if (hasMore) {
curPage++ getPresenter().fetchListData(allFilter, getPresenter().mExtras)
getPresenter().fetchListData(allFilter, curPage)
} }
} }
} }
...@@ -374,9 +373,6 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -374,9 +373,6 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
override fun localData() { override fun localData() {
} }
override fun updateCache(showType: Int, searchBean: ExpertSearchBean) {
}
//路由传递过来的参数 //路由传递过来的参数
private fun getRouterParam() { private fun getRouterParam() {
if (null != intent && intent.hasExtra("routerParam")) { if (null != intent && intent.hasExtra("routerParam")) {
...@@ -402,7 +398,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -402,7 +398,7 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
allFilter.categories.add(cat) allFilter.categories.add(cat)
getPresenter().fetchListHead() getPresenter().fetchListHead()
//加载本地缓存数据 //加载本地缓存数据
getPresenter().localData(initShowType) // getPresenter().localData(initShowType)
refresh(false) refresh(false)
v_loading.visibility = View.VISIBLE v_loading.visibility = View.VISIBLE
...@@ -785,78 +781,26 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -785,78 +781,26 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
} }
} }
//服务列表数据获取到后的回调
override fun onServiceListFetched(
data: MutableList<DoctorServiceItem>,
page: Int,
totalPage: Int
) {
LogUtil.d("onServiceListFetched")
// if (rvExperts.adapter != serviceAdapter) {
// rvExperts.adapter = serviceAdapter
// }
if (page == 1) {
if (fromPageType != -1 && isDoSearch) {
// LogUtil.d("keyword: " + keyWord + " isRecommend: " + isRecommend + " hasResult: " + (data.size > 0 && data != null ?: false) + " location: " + fromPages[fromPageType])
}
serviceList.clear()
hasMore = true
// serviceAdapter.hasMore = true
}
if (fromPageType == -1) {
bury(keyWord ?: "", data.size > 0, isRecommend, "首页分类")
} else {
bury(keyWord ?: "", data.size > 0, isRecommend, fromPages[fromPageType])
}
if (page >= totalPage) {
hasMore = false
// serviceAdapter.hasMore = false
}
serviceList.addAll(data)
// serviceAdapter.notifyDataSetChanged()
isRecommend = false
isDoSearch = false
v_loading.visibility = View.GONE
ll_network_error.visibility = View.GONE
rvExperts.visibility = View.VISIBLE
dismissProgressDialog()
srlContainer.isRefreshing = false
}
//专家列表数据获取到后的回调 //专家列表数据获取到后的回调
override fun onDoctorListFetched( override fun onDoctorListFetched(data: MutableList<ExpertServiceItem>, extras:Extras?,curPage:Int) {
data: MutableList<DoctorServiceItem>,
page: Int,
totalPage: Int
) {
LogUtil.d("onDoctorListFetched") LogUtil.d("onDoctorListFetched")
if (rvExperts.adapter != doctorAdapter) { if (rvExperts.adapter != doctorAdapter) {
rvExperts.adapter = doctorAdapter rvExperts.adapter = doctorAdapter
} }
LogUtil.d("data size " + data.size) LogUtil.d("data size " + data.size)
if (page == 1) {
if (fromPageType != -1 && isDoSearch) {
// LogUtil.d("keyword: " + keyWord + " isRecommend: " + isRecommend + " hasResult: " + (data.size > 0 && data != null ?: false) + " location: " + fromPages[fromPageType])
}
doctorList.clear()
doctorAdapter.hasMore = true
hasMore = true
}
if (fromPageType == -1) { if (fromPageType == -1) {
bury(keyWord ?: "", data != null && data.size > 0, isRecommend, "首页分类") bury(keyWord ?: "", data.size > 0, isRecommend, "首页分类")
} else { } else {
bury(keyWord ?: "", data != null && data.size > 0, isRecommend, fromPages[fromPageType]) bury(keyWord ?: "", data.size > 0, isRecommend, fromPages[fromPageType])
} }
if (page >= totalPage) { if (extras==null) {
hasMore = false hasMore = false
doctorAdapter.hasMore = false doctorAdapter.hasMore = false
} }
if (curPage==1){
doctorList.clear()
}
doctorList.addAll(data) doctorList.addAll(data)
doctorAdapter.notifyDataSetChanged() doctorAdapter.notifyDataSetChanged()
isDoSearch = false isDoSearch = false
...@@ -866,7 +810,6 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -866,7 +810,6 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
ll_network_error.visibility = View.GONE ll_network_error.visibility = View.GONE
rvExperts.visibility = View.VISIBLE rvExperts.visibility = View.VISIBLE
dismissProgressDialog()
srlContainer.isRefreshing = false srlContainer.isRefreshing = false
} }
...@@ -1188,21 +1131,29 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -1188,21 +1131,29 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
private fun filterLabelSet() { private fun filterLabelSet() {
if ((allFilter.others.size + allFilter.ages.size + allFilter.doctorEdu.size + allFilter.enquiries.size + allFilter.title.size + allFilter.specialityCrowd.size) == 1) { if ((allFilter.others.size + allFilter.ages.size + allFilter.doctorEdu.size + allFilter.enquiries.size + allFilter.title.size + allFilter.specialityCrowd.size) == 1) {
var text: String? = "" var text: String? = ""
if (allFilter.others.size == 1) { when {
text = allFilter.others[0].value allFilter.others.size == 1 -> {
} else if (allFilter.ages.size == 1) { text = allFilter.others[0].value
text = allFilter.ages[0].value }
} else if (allFilter.enquiries.size == 1) { allFilter.ages.size == 1 -> {
text = allFilter.enquiries[0].value text = allFilter.ages[0].value
} else if (allFilter.title.size == 1) { }
text = allFilter.title[0].value allFilter.enquiries.size == 1 -> {
} else if (allFilter.specialityCrowd.size == 1) { text = allFilter.enquiries[0].value
text = allFilter.specialityCrowd[0].value }
}else if(allFilter.doctorEdu.size == 1){ allFilter.title.size == 1 -> {
//学历 text = allFilter.title[0].value
text = allFilter.doctorEdu[0].value }
} else { allFilter.specialityCrowd.size == 1 -> {
text = "筛选" text = allFilter.specialityCrowd[0].value
}
allFilter.doctorEdu.size == 1 -> {
//学历
text = allFilter.doctorEdu[0].value
}
else -> {
text = "筛选"
}
} }
if (text?.length ?: 0 > 4) { if (text?.length ?: 0 > 4) {
tvFilter.text = text?.substring(0, 3) + "..." tvFilter.text = text?.substring(0, 3) + "..."
...@@ -1372,27 +1323,27 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -1372,27 +1323,27 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
* 显示主题弹窗 * 显示主题弹窗
*/ */
private fun showSubjectPopupWindow() { private fun showSubjectPopupWindow() {
tempFilter.categories.clear() // tempFilter.categories.clear()
tempFilter.categories.addAll(allFilter.categories) // tempFilter.categories.addAll(allFilter.categories)
val categories = headData?.cates // val categories = headData?.cates
if (categories != null) { // if (categories != null) {
categoryPopup = CategoryPopupWindow(this, categories, tempFilter.categories) // categoryPopup = CategoryPopupWindow(this, categories)
categoryPopup!!.setOnDismissListener { // categoryPopup!!.setOnDismissListener {
viewDim.visibility = View.INVISIBLE // viewDim.visibility = View.INVISIBLE
if (allFilter.categories.size > 1 || (allFilter.categories.size == 1 && allFilter.categories[0] != headData!!.cates[0])) { // if (allFilter.categories.size > 1 || (allFilter.categories.size == 1 && allFilter.categories[0] != headData!!.cates[0])) {
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED) // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED)
} else { // } else {
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL) // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL)
} // }
} // }
categoryPopup!!.onSubjectsSelectedListener = this // categoryPopup!!.onSubjectsSelectedListener = this
categoryPopup!!.showAsDropDown(viewSep2) // categoryPopup!!.showAsDropDown(viewSep2)
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN) // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN)
viewDim.visibility = View.VISIBLE // viewDim.visibility = View.VISIBLE
} else { // } else {
ToastUtil.toastShort("数据初始化失败,请重试") // ToastUtil.toastShort("数据初始化失败,请重试")
getPresenter().fetchListHead() // getPresenter().fetchListHead()
} // }
} }
/** /**
...@@ -1400,58 +1351,58 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -1400,58 +1351,58 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
* *
* 新增逻辑:当主题选择后,需要判断热门筛选中是否也有该主题,如果有,也需要同步更新选中状态 * 新增逻辑:当主题选择后,需要判断热门筛选中是否也有该主题,如果有,也需要同步更新选中状态
*/ */
override fun onCategoriesSelected(categories: ArrayList<CateItem>) { override fun onCategoriesSelected() {
ActionCountUtils.count( // ActionCountUtils.count(
ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_THEME_CLICK, // ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_THEME_CLICK,
categories.map { it.cateName }.joinToString("|") // categories.map { it.cateName }.joinToString("|")
) // )
if (categories.size == 1 && "全部" != categories[0].cateName) { // if (categories.size == 1 && "全部" != categories[0].cateName) {
//显示选中标题 // //显示选中标题
tvSubject.text = categories[0].cateName // tvSubject.text = categories[0].cateName
} else { // } else {
//显示主标题 // //显示主标题
tvSubject.text = "主题" // tvSubject.text = "主题"
} // }
//判断主题选中,判断热门筛选中是否也有该主题 // //判断主题选中,判断热门筛选中是否也有该主题
Executors.newCachedThreadPool().execute { // Executors.newCachedThreadPool().execute {
if (headData!!.highlighter.size > 0) { // if (headData!!.highlighter.size > 0) {
for (index in 0.until(headData!!.highlighter.size)) { // for (index in 0.until(headData!!.highlighter.size)) {
if (headData!!.highlighter[index].type == "1") { // if (headData!!.highlighter[index].type == "1") {
var textview = lin_filter2.getChildAt(index) as TextView // var textview = lin_filter2.getChildAt(index) as TextView
this@ExpertSearchActivity.runOnUiThread { // this@ExpertSearchActivity.runOnUiThread {
textview.isSelected = false // textview.isSelected = false
textview.paint.isFakeBoldText = false // textview.paint.isFakeBoldText = false
} // }
for (bean in categories) { // for (bean in categories) {
if (TextUtils.equals( // if (TextUtils.equals(
bean.cateName, // bean.cateName,
headData!!.highlighter[index].value // headData!!.highlighter[index].value
) // )
) { // ) {
this@ExpertSearchActivity.runOnUiThread { // this@ExpertSearchActivity.runOnUiThread {
textview.isSelected = true // textview.isSelected = true
textview.paint.isFakeBoldText = true // textview.paint.isFakeBoldText = true
} // }
break // break
} // }
} // }
} // }
} // }
} // }
} // }
//
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN) // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN)
// LogUtil.d("theme callback: " + categories.map { it.cateName }.joinToString(",")) //// LogUtil.d("theme callback: " + categories.map { it.cateName }.joinToString(","))
// props1.put("filtrate_second", categories.map { it.cateName }.joinToString(",")) //// props1.put("filtrate_second", categories.map { it.cateName }.joinToString(","))
// BuryPointUtils.buryPoint("Filtrate", props1) //// BuryPointUtils.buryPoint("Filtrate", props1)
allFilter.categories.clear() // allFilter.categories.clear()
allFilter.categories.addAll(categories) // allFilter.categories.addAll(categories)
refresh() // refresh()
if (categories.size == 1) { // if (categories.size == 1) {
doctorAdapter?.cateId = "${categories[0].cateId}" // doctorAdapter?.cateId = "${categories[0].cateId}"
} else { // } else {
doctorAdapter?.cateId = "" // doctorAdapter?.cateId = ""
} // }
} }
override fun onRefresh() { override fun onRefresh() {
...@@ -1468,16 +1419,17 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres ...@@ -1468,16 +1419,17 @@ class ExpertSearchActivity : BaseMvpActivity<IExpertSearchView, ExpertSearchPres
} else { } else {
allFilter.searchWord = null allFilter.searchWord = null
} }
curPage = 1
onScrollListener.resetState() onScrollListener.resetState()
getPresenter().fetchListData(allFilter, curPage) getPresenter().mExtras=null
getPresenter().fetchListData(allFilter, getPresenter().mExtras)
doctorList.clear()
rvExperts.scrollToPosition(0) rvExperts.scrollToPosition(0)
} }
//执行搜索 //执行搜索
private fun doSearch() { private fun doSearch() {
image_scroll_top.visibility = View.GONE image_scroll_top.visibility = View.GONE
hideSoftInput(); hideSoftInput()
// keyWord = etSearch.text.toString() // keyWord = etSearch.text.toString()
// if (TextUtils.isEmpty(keyWord?.trim())) { // if (TextUtils.isEmpty(keyWord?.trim())) {
// ToastUtil.toastShort(this, "请输入搜索内容") // ToastUtil.toastShort(this, "请输入搜索内容")
......
...@@ -6,7 +6,7 @@ import android.animation.ObjectAnimator ...@@ -6,7 +6,7 @@ import android.animation.ObjectAnimator
import android.animation.PropertyValuesHolder import android.animation.PropertyValuesHolder
import android.content.Context import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
import android.os.Build import android.os.Handler
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
...@@ -37,7 +37,6 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils ...@@ -37,7 +37,6 @@ import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.listener.EndlessRecyclerViewScrollListener import com.ydl.ydlcommon.view.listener.EndlessRecyclerViewScrollListener
import com.yidianling.common.tools.LogUtil import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxDeviceTool
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.adapter.ExpertSearchAdapter import com.yidianling.consultant.adapter.ExpertSearchAdapter
...@@ -59,10 +58,10 @@ import kotlinx.android.synthetic.main.consultant_layout_search_content.* ...@@ -59,10 +58,10 @@ import kotlinx.android.synthetic.main.consultant_layout_search_content.*
import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.* import kotlinx.android.synthetic.main.consultant_layout_search_toolbar.*
import org.json.JSONObject import org.json.JSONObject
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.collections.ArrayList
@Route(path = "/consultant/consultant") @Route(path = "/consultant/consultant")
class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPresenter>(), class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPresenter>(), View.OnClickListener, IExpertSearchView,
View.OnClickListener, IExpertSearchView,
OnCategoriesSelectedListener, OnSortItemSelectedListener, OnFilterConfirmListener, OnCategoriesSelectedListener, OnSortItemSelectedListener, OnFilterConfirmListener,
SwipeRefreshLayout.OnRefreshListener { SwipeRefreshLayout.OnRefreshListener {
private lateinit var mContext: Context private lateinit var mContext: Context
...@@ -147,9 +146,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -147,9 +146,8 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
private val allFilter = AllFilter() //当前筛选 private val allFilter = AllFilter() //当前筛选
private val tempFilter = AllFilter() //临时筛选,未确认状态 private val tempFilter = AllFilter() //临时筛选,未确认状态
private var curPage = 1 private val doctorList = ArrayList<ExpertServiceItem>()
private val doctorList = ArrayList<DoctorServiceItem>() private val serviceList = ArrayList<ExpertServiceItem>()
private val serviceList = ArrayList<DoctorServiceItem>()
private var hasMore = true private var hasMore = true
private var initCategory = "0" private var initCategory = "0"
private var initShowType: Int = 0 private var initShowType: Int = 0
...@@ -162,7 +160,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -162,7 +160,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
private var isRecommend = false //埋点数据 private var isRecommend = false //埋点数据
private var keyWord: String? = null //埋点数据 private var keyWord: String? = null //埋点数据
private var isDoSearch: Boolean = false //埋点判断是否通过搜索进入埋点的 private var isDoSearch: Boolean = false //埋点判断是否通过搜索进入埋点的
private val bannerList = ArrayList<String>() // private val bannerList = ArrayList<String>()
private var hasSelectedArea = false //是否选择过地区 private var hasSelectedArea = false //是否选择过地区
private var hasSelectedSort = false //是否选择过排序 private var hasSelectedSort = false //是否选择过排序
...@@ -200,18 +198,6 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -200,18 +198,6 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
srlContainer.isEnabled = i >= 0 srlContainer.isEnabled = i >= 0
}) })
// etSearch.setOnEditorActionListener { _, actionId, _ ->
// if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// doSearch()
// }
// true
// }
// etSearch.setOnClickListener { appbar_layout.setExpanded(false) }
// etSearch.setOnFocusChangeListener { view, b -> if (b) appbar_layout.setExpanded(false) }
// btn_back.setOnClickListener {
// onBackPressed()
// }
doctorAdapter = ExpertSearchAdapter(mContext, this, doctorList) doctorAdapter = ExpertSearchAdapter(mContext, this, doctorList)
rvExperts.adapter = doctorAdapter rvExperts.adapter = doctorAdapter
...@@ -295,8 +281,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -295,8 +281,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) { override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) {
if (hasMore) { if (hasMore) {
curPage++ getPresenter().fetchListData(allFilter, getPresenter().mExtras)
getPresenter().fetchListData(allFilter, curPage)
} }
} }
} }
...@@ -359,21 +344,14 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -359,21 +344,14 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} }
override fun localData() { override fun localData() {
}
override fun updateCache(showType: Int, searchBean: ExpertSearchBean) {
} }
private fun initData() { private fun initData() {
allFilter.showType.key = initShowType allFilter.showType.key = initShowType
val cat = CateItem()
cat.cateId = initCategory
allFilter.categories.clear() allFilter.categories.clear()
allFilter.categories.add(cat)
getPresenter().fetchListHead() getPresenter().fetchListHead()
//加载本地缓存数据
getPresenter().localData(initShowType)
//refresh(false)
v_loading.visibility = View.VISIBLE v_loading.visibility = View.VISIBLE
v_loading.setViewType(LogoLoadingView.TYPE_LOADING, null) v_loading.setViewType(LogoLoadingView.TYPE_LOADING, null)
...@@ -382,51 +360,58 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -382,51 +360,58 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} }
/** /**
* 初始化状态栏位置 * 获取所有的筛选选项数据
*/ */
private fun initStatus() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4以下不支持状态栏变色
StatusBarUtils.setTransparentForImageView(mActivity, null)
val statusBarHeight = StatusBarUtils.getStatusBarHeight(mContext)
val lp1 = title_layout.layoutParams as LinearLayout.LayoutParams
lp1.height = (RxImageTool.dp2px(48f) + statusBarHeight)
title_layout.setPadding(0, statusBarHeight, 0, 0)
}
}
//筛选数据获取后回调
override fun onHeadFetched(headData: HeadData?) { override fun onHeadFetched(headData: HeadData?) {
//头部数据获取到后初始化筛选数据 //头部数据获取到后初始化筛选数据
this.headData = headData this.headData = headData
if (initCategory != "0") { headData?.let { it ->
if (headData?.cates != null) { // allFilter.reorder = it.reorder[0]
for (cate in headData.cates) { allFilter.showType = it.filters.showType[initShowType]
if (cate.cateId == initCategory) { if (it.highlighter.size > 0) {
allFilter.categories.clear() //设置热门搜索
allFilter.categories.add(cate) initHotViews(lin_filter2, it.highlighter)
if (allFilter.categories.size == 1 && !"全部".equals(allFilter.categories[0].cateName)) { }
//显示选中标题 it.cates[0].children?.forEachIndexed { index, children->
tvSubject.text = allFilter.categories[0].cateName val type = if (children.cate_name.length>4) 2 else 1
} else { val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
//显示主标题 allFilter.childList.add(childrenBean)
tvSubject.text = "主题" }
} it.cates[1].children?.forEachIndexed { index, children->
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED) val type = if (children.cate_name.length>4) 2 else 1
break val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
} allFilter.stressList.add(childrenBean)
} }
it.cates[2].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.loveEmotionList.add(childrenBean)
}
it.cates[3].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.marriedFamilyList.add(childrenBean)
}
it.cates[4].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.personalGrowthList.add(childrenBean)
}
it.cates[5].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.interpersonalRelationshipList.add(childrenBean)
}
it.cates[6].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.careerDevelopmentList.add(childrenBean)
}
it.cates[7].children?.forEachIndexed { index, children->
val type = if (children.cate_name.length>4) 2 else 1
val childrenBean = ChildrenBean(children.cate_name,children.cate_id,index<=12,type)
allFilter.mentalHealthList.add(childrenBean)
} }
initCategory = "0"
} else {
allFilter.categories.clear()
allFilter.categories.add(headData?.cates?.get(0) ?: CateItem())
}
allFilter.reorder = headData?.reorder?.get(0) ?: ReorderItem()
allFilter.showType = headData?.filters?.showType?.get(initShowType) ?: ShowTypeItem()
if (headData?.highlighter?.size ?: 0 > 0) {
//设置热门搜索
initHotViews(lin_filter2, headData!!.highlighter)
} }
} }
...@@ -437,9 +422,9 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -437,9 +422,9 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
if (view.childCount > 0) { if (view.childCount > 0) {
return return
} }
val popWidth = RxDeviceTool.getScreenWidth(context) // val popWidth = RxDeviceTool.getScreenWidth(context)
val mWidth = (popWidth - RxImageTool.dp2px(10f)) / hotData.size // val mWidth = (popWidth - RxImageTool.dp2px(10f)) / hotData.size
for ((index, hot) in hotData!!.withIndex()) { for (hot in hotData) {
val tv = View.inflate(context, R.layout.consultant_item_filter_online, null) as TextView val tv = View.inflate(context, R.layout.consultant_item_filter_online, null) as TextView
val textView = tv.tvFree val textView = tv.tvFree
val params = LinearLayout.LayoutParams(0, RxImageTool.dp2px(22f)) val params = LinearLayout.LayoutParams(0, RxImageTool.dp2px(22f))
...@@ -483,32 +468,31 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -483,32 +468,31 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
private fun dealHotSelect(hotData: HighlighterItem, isAdd: Boolean) { private fun dealHotSelect(hotData: HighlighterItem, isAdd: Boolean) {
when (hotData.type) { when (hotData.type) {
"1" -> { "1" -> {
if (headData?.cates!!.size > 0) { // if (headData?.cates!!.size > 0) {
for (bean in headData?.cates!!) { // for (bean in headData?.cates!!) {
if (TextUtils.equals(hotData.id, bean.cateId.toString())) { // if (TextUtils.equals(hotData.id, bean.cateId.toString())) {
if (isAdd) { // if (isAdd) {
if (allFilter.categories.size == 1 && allFilter.categories[0].cateId == "0") { // if (allFilter.categories.size == 1 && allFilter.categories[0].cateId == "0") {
allFilter.categories.clear() // allFilter.categories.clear()
} // }
allFilter.categories.add(bean) // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED)
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED) // } else {
} else { // allFilter.categories.remove(bean)
allFilter.categories.remove(bean) // if (allFilter.categories.size == 0) {
if (allFilter.categories.size == 0) { // updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL)
allFilter.categories.add(headData?.cates?.get(0) ?: CateItem()) // }
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL) // }
} // }
} // }
} // if (allFilter.categories.size == 1 && "全部" != allFilter.categories[0].cateName) {
} // //显示选中标题
if (allFilter.categories.size == 1 && "全部" != allFilter.categories[0].cateName) { // tvSubject.text = allFilter.categories[0].cateName
//显示选中标题 // } else {
tvSubject.text = allFilter.categories[0].cateName // //显示主标题
} else { // tvSubject.text = "主题"
//显示主标题 // }
tvSubject.text = "主题" // }
} updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED)
}
} }
"2" -> {//省 "2" -> {//省
if (headData?.region!!.size > 0) { if (headData?.region!!.size > 0) {
...@@ -719,7 +703,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -719,7 +703,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
//用于侧滑筛选过来更新快捷筛选选中状态 //用于侧滑筛选过来更新快捷筛选选中状态
private fun updateOtherViews(otherdata: List<OtherItem>) { private fun updateOtherViews(otherData: List<OtherItem>) {
if (lin_filter2.childCount > 0) { if (lin_filter2.childCount > 0) {
//清空选中 //清空选中
for (i in 0.until(lin_filter2.childCount)) { for (i in 0.until(lin_filter2.childCount)) {
...@@ -728,7 +712,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -728,7 +712,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
textView.paint.isFakeBoldText = false textView.paint.isFakeBoldText = false
} }
//重置选中状态 //重置选中状态
for ((index, other) in otherdata.withIndex()) { for (other in otherData) {
for (i in 0 until lin_filter2.childCount) { for (i in 0 until lin_filter2.childCount) {
val textView = lin_filter2.getChildAt(i) as TextView val textView = lin_filter2.getChildAt(i) as TextView
if (textView.text == other.value) { if (textView.text == other.value) {
...@@ -740,82 +724,32 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -740,82 +724,32 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} }
} }
//服务列表数据获取到后的回调 /**
override fun onServiceListFetched( * 获取专家列表数据
data: MutableList<DoctorServiceItem>, */
page: Int, override fun onDoctorListFetched(data: MutableList<ExpertServiceItem>, extras:Extras?,curPage:Int) {
totalPage: Int
) {
LogUtil.d("onServiceListFetched")
// if (rvExperts.adapter != serviceAdapter) {
// rvExperts.adapter = serviceAdapter
// }
if (page == 1) {
if (fromPageType != -1 && isDoSearch) {
// LogUtil.d("keyword: " + keyWord + " isRecommend: " + isRecommend + " hasResult: " + (data.size > 0 && data != null ?: false) + " location: " + fromPages[fromPageType])
}
serviceList.clear()
hasMore = true
// serviceAdapter.hasMore = true
}
if (fromPageType == -1) {
bury(keyWord ?: "", data.size > 0, isRecommend, "首页分类")
} else {
bury(keyWord ?: "", data.size > 0, isRecommend, fromPages[fromPageType])
}
if (page >= totalPage) {
hasMore = false
// serviceAdapter.hasMore = false
}
serviceList.addAll(data)
// serviceAdapter.notifyDataSetChanged()
isRecommend = false
isDoSearch = false
v_loading.visibility = View.GONE
ll_network_error.visibility = View.GONE
rvExperts.visibility = View.VISIBLE
srlContainer.isRefreshing = false
}
//专家列表数据获取到后的回调
override fun onDoctorListFetched(
data: MutableList<DoctorServiceItem>,
page: Int,
totalPage: Int
) {
LogUtil.d("onDoctorListFetched") LogUtil.d("onDoctorListFetched")
if (rvExperts.adapter != doctorAdapter) { if (rvExperts.adapter != doctorAdapter) {
rvExperts.adapter = doctorAdapter rvExperts.adapter = doctorAdapter
} }
LogUtil.d("data size " + data.size) LogUtil.d("data size " + data.size)
if (page == 1) {
if (fromPageType != -1 && isDoSearch) {
// LogUtil.d("keyword: " + keyWord + " isRecommend: " + isRecommend + " hasResult: " + (data.size > 0 && data != null ?: false) + " location: " + fromPages[fromPageType])
}
doctorList.clear()
doctorAdapter.hasMore = true
hasMore = true
}
if (fromPageType == -1) { if (fromPageType == -1) {
bury(keyWord ?: "", data != null && data.size > 0, isRecommend, "首页分类") bury(keyWord ?: "", data.size > 0, isRecommend, "首页分类")
} else { } else {
bury(keyWord ?: "", data != null && data.size > 0, isRecommend, fromPages[fromPageType]) bury(keyWord ?: "", data.size > 0, isRecommend, fromPages[fromPageType])
}
if (curPage==1){
hasMore = true
doctorAdapter.hasMore = true
doctorList.clear()
} }
if (page >= totalPage) {
if (extras==null||data.size==0) {
hasMore = false hasMore = false
doctorAdapter.hasMore = false doctorAdapter.hasMore = false
} }
doctorList.addAll(data) doctorList.addAll(data)
//咨询师列表去除重复数据start
var linkedHashSet=LinkedHashSet(doctorList)
doctorList.clear()
doctorList.addAll(linkedHashSet)
//咨询师列表去除重复数据end
doctorAdapter.notifyDataSetChanged() doctorAdapter.notifyDataSetChanged()
isDoSearch = false isDoSearch = false
isRecommend = false isRecommend = false
...@@ -831,7 +765,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -831,7 +765,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
isDoSearch = false isDoSearch = false
isRecommend = false isRecommend = false
if (curPage == 1) { if (getPresenter().mExtras == null) {
v_loading.setViewType( v_loading.setViewType(
LogoLoadingView.TYPE_NET_LOSS, LogoLoadingView.TYPE_NET_LOSS,
getString(R.string.consultant_reload_hint) getString(R.string.consultant_reload_hint)
...@@ -892,7 +826,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -892,7 +826,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
appbar_layout.setExpanded(false) appbar_layout.setExpanded(false)
appbar_layout.postDelayed({ appbar_layout.postDelayed({
showSubjectPopupWindow() showSubjectPopupWindow()
}, 300); }, 300)
} }
R.id.tvArea -> { R.id.tvArea -> {
...@@ -1212,19 +1146,23 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1212,19 +1146,23 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
?: "" ?: ""
) )
if (sortItem.value.equals("综合排序")) { when {
tvSort.text = "排序" sortItem.value.equals("综合排序") -> {
} else if (sortItem.value?.length ?: 0 > 4) { tvSort.text = "排序"
tvSort.text = sortItem.value?.substring(0, 3) + "..." }
} else { sortItem.value?.length ?: 0 > 4 -> {
tvSort.text = sortItem.value tvSort.text = sortItem.value?.substring(0, 3) + "..."
}
else -> {
tvSort.text = sortItem.value
}
} }
//判断排序选中,判断热门筛选中是否也有该排序 //判断排序选中,判断热门筛选中是否也有该排序
if (headData!!.highlighter.size > 0) { if (headData!!.highlighter.size > 0) {
for (index in 0.until(headData!!.highlighter.size)) { for (index in 0.until(headData!!.highlighter.size)) {
if (headData!!.highlighter[index].type == "3") { if (headData!!.highlighter[index].type == "3") {
var textview = lin_filter2.getChildAt(index) as TextView val textview = lin_filter2.getChildAt(index) as TextView
if (TextUtils.equals(sortItem.value, headData!!.highlighter[index].value)) { if (TextUtils.equals(sortItem.value, headData!!.highlighter[index].value)) {
textview.isSelected = true textview.isSelected = true
textview.paint.isFakeBoldText = true textview.paint.isFakeBoldText = true
...@@ -1327,91 +1265,47 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1327,91 +1265,47 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} }
private var categoryPopup: CategoryPopupWindow? = null private var categoryPopup: CategoryPopupWindow? = null
private var mHandler:Handler?=null
//显示主题弹窗 /**
* 显示八大类弹窗
*/
private fun showSubjectPopupWindow() { private fun showSubjectPopupWindow() {
tempFilter.categories.clear() if (categoryPopup==null) {
tempFilter.categories.addAll(allFilter.categories) categoryPopup = CategoryPopupWindow(mActivity,allFilter)
val categories = headData?.cates mHandler = Handler()
if (categories != null) { mHandler!!.post {
categoryPopup = CategoryPopupWindow(mActivity, categories, tempFilter.categories) categoryPopup!!.updateData()
}
categoryPopup!!.setOnDismissListener { categoryPopup!!.setOnDismissListener {
viewDim.visibility = View.INVISIBLE viewDim.visibility = View.INVISIBLE
if (allFilter.categories.size > 1 || (allFilter.categories.size == 1 && allFilter.categories[0] != headData!!.cates[0])) { showConsultAssistantDialog()
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED)
} else {
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL)
}
} }
hideConsultAssistantDialog()
categoryPopup!!.onSubjectsSelectedListener = this categoryPopup!!.onSubjectsSelectedListener = this
categoryPopup!!.showAsDropDown(viewSep2) categoryPopup!!.showAsDropDown(viewSep2)
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN) updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN)
viewDim.visibility = View.VISIBLE viewDim.visibility = View.VISIBLE
} else { }else{
ToastUtil.toastShort("数据初始化失败,请重试") hideConsultAssistantDialog()
getPresenter().fetchListHead() categoryPopup!!.showAsDropDown(viewSep2)
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN)
viewDim.visibility = View.VISIBLE
} }
} }
/** /**
* 主题选择确认回调 * 主题选择确认回调
* *
* 新增逻辑:当主题选择后,需要判断热门筛选中是否也有该主题,如果有,也需要同步更新选中状态
*/ */
override fun onCategoriesSelected(categories: ArrayList<CateItem>) { override fun onCategoriesSelected() {
ActionCountUtils.count( // ActionCountUtils.count(ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_THEME_CLICK, categories.map { it.cateName }.joinToString("|"))
ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_THEME_CLICK,
categories.map { it.cateName }.joinToString("|") if (allFilter.categoryId2List.size>0||allFilter.categoryId3List.size>0){
) updateFilterTextViewStatus(tvSubject, FILTER_STATUS_FILTERED)
if (categories.size == 1 && "全部" != categories[0].cateName) { refresh()
//显示选中标题 }else{
tvSubject.text = categories[0].cateName updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL)
} else {
//显示主标题
tvSubject.text = "主题"
}
//如果是亲自教育类别----->点击咨询顾问---会跳转到一个只是亲自教育的导医队列中
//判断主题选中,判断热门筛选中是否也有该主题
Executors.newCachedThreadPool().execute {
if (headData!!.highlighter.size > 0) {
for (index in 0.until(headData!!.highlighter.size)) {
if (headData!!.highlighter[index].type == "1") {
val textview = lin_filter2.getChildAt(index) as TextView
mActivity.runOnUiThread {
textview.isSelected = false
textview.paint.isFakeBoldText = false
}
for (bean in categories) {
if (TextUtils.equals(
bean.cateName,
headData!!.highlighter[index].value
)
) {
mActivity.runOnUiThread {
textview.isSelected = true
textview.paint.isFakeBoldText = true
}
break
}
}
}
}
}
}
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_OPEN)
// LogUtil.d("theme callback: " + categories.map { it.cateName }.joinToString(","))
// props1.put("filtrate_second", categories.map { it.cateName }.joinToString(","))
// BuryPointUtils.buryPoint("Filtrate", props1)
allFilter.categories.clear()
allFilter.categories.addAll(categories)
refresh()
if (categories.size == 1) {
doctorAdapter.cateId = "${categories[0].cateId}"
} else {
doctorAdapter.cateId = ""
} }
} }
...@@ -1430,55 +1324,12 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1430,55 +1324,12 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
} else { } else {
allFilter.searchWord = null allFilter.searchWord = null
} }
curPage = 1
onScrollListener.resetState() onScrollListener.resetState()
getPresenter().fetchListData(allFilter, curPage) getPresenter().mExtras = null
getPresenter().fetchListData(allFilter, getPresenter().mExtras)
rvExperts.scrollToPosition(0) rvExperts.scrollToPosition(0)
} }
//执行搜索
private fun doSearch() {
image_scroll_top.visibility = View.GONE
hideSoftInput();
// keyWord = etSearch.text.toString()
// if (TextUtils.isEmpty(keyWord?.trim())) {
// ToastUtil.toastShort(this, "请输入搜索内容")
// return
// }
ActionCountUtils.count(
ConsultBIConstants.UserMainEvent.YDL_USER_SEARCH_CLICK,
keyWord ?: ""
)
isDoSearch = true
resetFilter()
refresh()
}
//重置所有筛选
private fun resetFilter() {
allFilter.categories.clear()
allFilter.categories.add(headData?.cates?.get(0) ?: CateItem())
allFilter.reorder = headData?.reorder?.get(0) ?: ReorderItem()
allFilter.region = RegionItem()
allFilter.sub = SubItem()
allFilter.enquiries.clear()
allFilter.ages.clear()
allFilter.others.clear()
updateFilterTextViewStatus(tvSubject, FILTER_STATUS_NORMAL)
updateFilterTextViewStatus(tvArea, FILTER_STATUS_NORMAL)
updateFilterTextViewStatus(tvSort, FILTER_STATUS_NORMAL)
if (headData != null) {
if (allFilter.showType != headData!!.filters.showType[1]) {
updateFilterTextViewStatus(tvFilter, FILTER_STATUS_FILTERED)
} else {
updateFilterTextViewStatus(tvFilter, FILTER_STATUS_NORMAL)
}
}
}
//设置筛选点击按钮状态 //设置筛选点击按钮状态
private fun updateFilterTextViewStatus(tv: TextView, status: Int) { private fun updateFilterTextViewStatus(tv: TextView, status: Int) {
when (status) { when (status) {
...@@ -1544,6 +1395,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres ...@@ -1544,6 +1395,7 @@ class ExpertSearchFragment : BaseMvpFragment<IExpertSearchView, ExpertSearchPres
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
mHandler=null
ConsultAssistantDialogUtils.INSTANCE.resetStatus() ConsultAssistantDialogUtils.INSTANCE.resetStatus()
} }
} }
...@@ -2,20 +2,21 @@ package com.yidianling.consultant ...@@ -2,20 +2,21 @@ package com.yidianling.consultant
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.text.TextUtils import android.text.TextUtils
import com.google.gson.Gson
import com.ydl.ydlcommon.base.BaseApp import com.ydl.ydlcommon.base.BaseApp
import com.ydl.ydlcommon.data.PlatformDataManager
import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.data.http.ThrowableConsumer import com.ydl.ydlcommon.data.http.ThrowableConsumer
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.ydl.ydlcommon.mvp.base.SimplePresenter import com.ydl.ydlcommon.mvp.base.SimplePresenter
import com.ydl.ydlcommon.utils.RxLifecycleUtils import com.ydl.ydlcommon.utils.RxLifecycleUtils
import com.ydl.ydlcommon.utils.YDLAsyncUtils
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.utils.remind.HttpErrorUtils import com.ydl.ydlcommon.utils.remind.HttpErrorUtils
import com.yidianling.common.tools.RxAppTool
import com.yidianling.consultant.http.ExpertSearchDataManager import com.yidianling.consultant.http.ExpertSearchDataManager
import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.model.bean.AllFilter import com.yidianling.consultant.model.bean.AllFilter
import com.yidianling.consultant.model.bean.ExpertSearchBean import com.yidianling.consultant.model.bean.Extras
import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils import com.yidianling.consultant.modular.singlton.ConsultAssistantDialogUtils
import com.yidianling.user.api.service.IUserService
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
...@@ -24,6 +25,7 @@ import io.reactivex.schedulers.Schedulers ...@@ -24,6 +25,7 @@ import io.reactivex.schedulers.Schedulers
* 专家搜索页Presenter * 专家搜索页Presenter
*/ */
class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() { class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() {
var mExtras: Extras? =null // 用于分页
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
fun fetchListHead() { fun fetchListHead() {
...@@ -41,146 +43,189 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() { ...@@ -41,146 +43,189 @@ class ExpertSearchPresenter : SimplePresenter<IExpertSearchView>() {
}) })
} }
/**
* 加载缓存
*/
fun localData(showType: Int) {
YDLAsyncUtils.asyncAsResult(object : YDLAsyncUtils.AsyncObjecyerResult {
override fun doAsyncAction(): Any {
return when (showType) {
0 -> {//按专家
YDLCacheUtils.getDoctorListData()
}
1 -> {//按服务
YDLCacheUtils.getServerListData()
}
else -> {
YDLCacheUtils.getServerListData()
}
}
}
override fun asyncResult(`object`: Any?) {
//如果没有缓存数据,显示加载框
if (`object` !is String || TextUtils.isEmpty(`object`)) {
mView.showRefreshLayout()
}
if (`object` is String) {
val gson = Gson()
val bean =
gson.fromJson<ExpertSearchBean>(`object`, ExpertSearchBean::class.java)
// val bean = gson.fromJson<ExpertSearchBean>(`object`, object : TypeToken<ExpertSearchBean>() {}.type)
if (bean?.list != null) {
when (showType) {
0 -> {
mView.onDoctorListFetched(bean.list, 1, 1)
}
1 -> {
mView.onServiceListFetched(bean.list, 1, 1)
}
else -> {
mView.onServiceListFetched(bean.list, 1, 1)
}
}
}
}
}
})
}
fun updateCache(showType: Int, searchBean: ExpertSearchBean) {
val gson = Gson()
val json = gson.toJson(searchBean)
when (showType) {
0 -> {
YDLCacheUtils.saveDoctorListData(json)
}
1 -> {
YDLCacheUtils.saveServerListData(json)
}
}
}
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
fun fetchListData(allFilter: AllFilter, page: Int) { fun fetchListData(allFilter: AllFilter, extras: Extras?) {
//是否亲子教育字段 //是否亲子教育字段
ConsultAssistantDialogUtils.REALATION_EDUCATION = ConsultAssistantDialogUtils.REALATION_EDUCATION = allFilter.categories.size == 1 && allFilter.categories[0].cateId == "23"
allFilter.categories.size == 1 && allFilter.categories[0].cateId == "23"
var showType = 0
val sb = StringBuffer() val map = HashMap<String, Any>()
sb.append("searchWord=") // filter
.append(if (TextUtils.isEmpty(allFilter.searchWord)) "" else allFilter.searchWord) val filterMap = HashMap<String, Any?>()
// 搜索词
if (!TextUtils.isEmpty(allFilter.searchWord)){
filterMap["__keywords"] = allFilter.searchWord
}
// 八大类一级标签
if (allFilter.categoryId2List.isNotEmpty()){
val categoryIdMap = HashMap<String, Any>()
categoryIdMap["in"] = allFilter.categoryId2List
filterMap["product_cates.category_id2"] = categoryIdMap
}
// 八大类二级标签
if (allFilter.categoryId3List.isNotEmpty()){
val categoryIdMap = HashMap<String, Any>()
categoryIdMap["in"] = allFilter.categoryId3List
filterMap["product_cates.category_id3"] = categoryIdMap
}
// 主题
if (allFilter.categories.isNotEmpty()) { if (allFilter.categories.isNotEmpty()) {
var categorys = allFilter.categories.map { it.cateId }.joinToString(",") val categories = ArrayList<String?>()
if ("0" == categorys) { allFilter.categories.forEach {
categorys = "" categories.add(it.cateId)
} }
sb.append("&directionTags=").append(categorys) val categoriesMap = HashMap<String, Any>()
categoriesMap["in"] = categories
filterMap["tags.tag_id"] = categoriesMap
} }
if (allFilter.region.value == "海外"||allFilter.region.value=="全国") { // 地区
sb.append("&country=").append(allFilter.sub.code) if (allFilter.region.value == "海外") {
filterMap["country_code"] = allFilter.sub.code
} else{ } else{
if (allFilter.region.code != null) { if (allFilter.region.code != null) {
sb.append("&province=").append(allFilter.region.code) filterMap["province_code"] = allFilter.region.code
} }
if (allFilter.sub.code != null) { if (allFilter.sub.code != null) {
sb.append("&city=").append(allFilter.sub.code) filterMap["city_code"] = allFilter.sub.code
} }
} }
if (allFilter.reorder.key != null) { // 咨询方式
sb.append("&reorder=").append(allFilter.reorder.key)
}
if (allFilter.enquiries.isNotEmpty()) { if (allFilter.enquiries.isNotEmpty()) {
sb.append("&enquirys=").append(allFilter.enquiries.map { it.key }.joinToString(",")) val way = ArrayList<Int>()
allFilter.enquiries.forEach {
way.add(it.key)
}
val wayMap = HashMap<String, Any>()
wayMap["in"] = way
filterMap["service_type_list.service_type"] = wayMap
} }
// 服务均价
if (allFilter.priceRanges != null) {
val avgPriceMap = HashMap<String, Any?>()
avgPriceMap["gte"] = allFilter.priceRanges?.minPrice
avgPriceMap["lte"] = allFilter.priceRanges?.maxPrice
filterMap["avg_price"] = avgPriceMap
}
// 年龄
if (allFilter.ages.isNotEmpty()) { if (allFilter.ages.isNotEmpty()) {
sb.append("&ages=").append(allFilter.ages.map { it.key }.joinToString(",")) val age = ArrayList<Int>()
allFilter.ages.forEach {
age.add(it.key)
}
val ageMap = HashMap<String, Any>()
ageMap["in"] = age
filterMap["years"] = ageMap
} }
// 资质
if (allFilter.doctorEdu.isNotEmpty()) { if (allFilter.title.isNotEmpty()) {
sb.append("&edus=").append(allFilter.doctorEdu.map { it.key }.joinToString(",")) val title = ArrayList<String?>()
allFilter.title.forEach {
title.add(it.key)
}
val titleMap = HashMap<String, Any>()
titleMap["in"] = title
filterMap["title"] = titleMap
} }
// 擅长人群拼接 // 擅长人群
if (allFilter.specialityCrowd.isNotEmpty()) { if (allFilter.specialityCrowd.isNotEmpty()) {
sb.append("&crowdsTags=") val specialityCrowd = ArrayList<String?>()
.append(allFilter.specialityCrowd.map { it.key }.joinToString(",")) allFilter.specialityCrowd.forEach {
specialityCrowd.add(it.key)
}
val specialityCrowdMap = HashMap<String, Any>()
specialityCrowdMap["in"] = specialityCrowdMap
filterMap["doctor_tag_list.list_cate_id"] = specialityCrowdMap
}
// 学历
if (allFilter.doctorEdu.isNotEmpty()) {
val edu = ArrayList<Int?>()
allFilter.doctorEdu.forEach {
edu.add(it.key)
}
val eduMap = HashMap<String, Any>()
eduMap["in"] = edu
filterMap["edu"] = eduMap
} }
// 其它
if (allFilter.others.isNotEmpty()) { if (allFilter.others.isNotEmpty()) {
sb.append("&others=").append(allFilter.others.map { it.key }.joinToString(",")) val gender = ArrayList<String?>()
allFilter.others.forEach {
if (it.key1=="gender"){
gender.add(it.value1)
}else{
filterMap[it.key1] = it.value1
}
}
val genderMap = HashMap<String, Any>()
if (gender.size>0){
genderMap["in"] = gender
filterMap["gender"] = genderMap
}
} }
// if (allFilter.showType.key != null) { map["filter"] = filterMap
// showType = allFilter.showType.key!!
// sb.append("&showType=").append(allFilter.showType.key!!) // sorts
// } if (allFilter.reorder.key != null) {
if (allFilter.title.isNotEmpty()) { val sortsMap = HashMap<String, Any>()
sb.append("&title=").append(allFilter.title.map { it.key }.joinToString(",")) sortsMap[allFilter.reorder.key1] = allFilter.reorder.value1
map["sorts"] = sortsMap
} }
if (allFilter.priceRanges != null) { // fields
sb.append("&minPrice=").append(allFilter.priceRanges?.minPrice) val fieldsMap = HashMap<String, Any>()
sb.append("&maxPrice=").append(allFilter.priceRanges?.maxPrice) fieldsMap["doctor_id"] = true
fieldsMap["doctor_name"] = true
fieldsMap["uid"] = true
fieldsMap["chat_status"] = true
fieldsMap["consult_status"] = true
fieldsMap["listen_status"] = true
fieldsMap["booking_status"] = true
fieldsMap["gender"] = true
fieldsMap["years"] = true
fieldsMap["head"] = true
fieldsMap["edu"] = true
fieldsMap["province"] = true
fieldsMap["city"] = true
fieldsMap["evaluation_average_score"] = true
fieldsMap["evaluate_num"] = true
fieldsMap["min_price"] = true
fieldsMap["title"] = true
fieldsMap["famous_remark"] = true
fieldsMap["help_num"] = true
fieldsMap["p30d_sold_hour"] = true
fieldsMap["sum_service_time"] = true
fieldsMap["has_servicefree_consult"] = true
fieldsMap["is_new_enter"] = true
fieldsMap["chat_num"] = true
fieldsMap["chat_btn_text"] = true
fieldsMap["feature_tags"] = true
fieldsMap["link_url"] = true
map["fields"] = fieldsMap
val optionsMap = HashMap<String, Any?>()
optionsMap["search_scene_id"] = "doctor_main_search"
optionsMap["uid"] = ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
optionsMap["ffrom"] = PlatformDataManager.getRam().getChannelName()
optionsMap["version"]= RxAppTool.getAppVersionName(BaseApp.getApp())
optionsMap["os_type"]= 2
if (extras!=null){
optionsMap["extras"] = extras
} }
sb.append("&page=").append(page) map["options"] = optionsMap
ExpertSearchDataManager.getHttp().searchDoctor(sb.toString())
ExpertSearchDataManager.getHttp()
.getExpertList(map)
.compose(RxLifecycleUtils.bindToLifecycle(mView)) .compose(RxLifecycleUtils.bindToLifecycle(mView))
.compose(RxUtils.resultJavaData()) .compose(RxUtils.resultJavaData())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(Consumer { .subscribe(Consumer {
if (null != it.list && it.list.isNotEmpty()) { // 当前页数
// if (showType == 0) { val curPage = (it.skip/it.limit)+1
// mView.onDoctorListFetched(it.list!!, page, it.pages) if (null != it.objects && it.objects.isNotEmpty()) {
// } else { mExtras = it.extras
// mView.onServiceListFetched(it.list!!, page, it.pages) mView.onDoctorListFetched(it.objects, mExtras,curPage)
// } } else if (curPage==1&&(null == it.objects || it.objects.isEmpty())){
mView.onDoctorListFetched(it.list, page, it.pages)
//更新缓存 只更新第一页的缓存
if (page == 1) {
updateCache(showType, it)
}
} else {
mView.fetchListEmpty("没有搜到相关信息,换个关键词看看吧") mView.fetchListEmpty("没有搜到相关信息,换个关键词看看吧")
} }
}, object : ThrowableConsumer() { }, object : ThrowableConsumer() {
......
...@@ -3,23 +3,20 @@ package com.yidianling.consultant ...@@ -3,23 +3,20 @@ package com.yidianling.consultant
import android.widget.ImageView import android.widget.ImageView
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydlcommon.mvp.base.IView import com.ydl.ydlcommon.mvp.base.IView
import com.yidianling.consultant.model.bean.DoctorServiceItem import com.yidianling.consultant.model.bean.ExpertServiceItem
import com.yidianling.consultant.model.bean.ExpertBannerBean import com.yidianling.consultant.model.bean.Extras
import com.yidianling.consultant.model.bean.ExpertSearchBean
import com.yidianling.consultant.model.bean.HeadData import com.yidianling.consultant.model.bean.HeadData
/** /**
* Created by zqk on 17-9-19. * Created by zqk on 17-9-19.
*/ */
interface IExpertSearchView : IView { interface IExpertSearchView : IView {
fun onServiceListFetched(data: MutableList<DoctorServiceItem>, page: Int, totalPage: Int)
fun showRefreshLayout() fun showRefreshLayout()
fun localData() fun localData()
fun updateCache(showType: Int,searchBean: ExpertSearchBean)
fun onHeadFetched(headData: HeadData?) fun onHeadFetched(headData: HeadData?)
fun onDoctorListFetched(data: MutableList<DoctorServiceItem>, page: Int,totalPage : Int) fun onDoctorListFetched(data: MutableList<ExpertServiceItem>, extras: Extras?,curPage:Int)
fun fetchFailed(msg: String?) fun fetchFailed(msg: String?)
fun fetchListFailed(msg: String?) fun fetchListFailed(msg: String?)
fun fetchListEmpty(msg: String?) fun fetchListEmpty(msg: String?)
......
...@@ -32,7 +32,7 @@ class CategoryRecyclerViewAdapter(private val context: Context, private val cate ...@@ -32,7 +32,7 @@ class CategoryRecyclerViewAdapter(private val context: Context, private val cate
override fun getItemCount(): Int = categories.size override fun getItemCount(): Int = categories.size
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val tvSubjectName: TextView = itemView.tvSubjectName val tvSubjectName: TextView = itemView.tv_sort_name
init { init {
itemView.setOnClickListener { itemView.setOnClickListener {
......
...@@ -15,6 +15,7 @@ import com.ydl.webview.NewH5Activity ...@@ -15,6 +15,7 @@ import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
import com.ydl.ydl_image.module.GlideApp import com.ydl.ydl_image.module.GlideApp
import com.ydl.ydlcommon.base.config.HttpConfig import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.utils.LogUtil
import com.ydl.ydlcommon.utils.URLUtils import com.ydl.ydlcommon.utils.URLUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
...@@ -22,7 +23,7 @@ import com.yidianling.consultant.ExpertSearchActivity ...@@ -22,7 +23,7 @@ import com.yidianling.consultant.ExpertSearchActivity
import com.yidianling.consultant.IExpertSearchView import com.yidianling.consultant.IExpertSearchView
import com.yidianling.consultant.R import com.yidianling.consultant.R
import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants
import com.yidianling.consultant.model.bean.DoctorServiceItem import com.yidianling.consultant.model.bean.ExpertServiceItem
import com.yidianling.consultant.modular.utils.TempH5RouteUtils import com.yidianling.consultant.modular.utils.TempH5RouteUtils
import com.yidianling.consultant.router.ConsultantIn import com.yidianling.consultant.router.ConsultantIn
import kotlinx.android.synthetic.main.consultant_expert_search_feedbackrate.view.* import kotlinx.android.synthetic.main.consultant_expert_search_feedbackrate.view.*
...@@ -39,7 +40,7 @@ import java.math.BigDecimal ...@@ -39,7 +40,7 @@ import java.math.BigDecimal
class ExpertSearchAdapter( class ExpertSearchAdapter(
private val context: Context, private val context: Context,
private val expertSearchView: IExpertSearchView, private val expertSearchView: IExpertSearchView,
private val listData: ArrayList<DoctorServiceItem> private val listData: ArrayList<ExpertServiceItem>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object { companion object {
...@@ -49,7 +50,7 @@ class ExpertSearchAdapter( ...@@ -49,7 +50,7 @@ class ExpertSearchAdapter(
} }
//记录当前选择主题的id //记录当前选择主题的id
var cateId: String? = null var cateId: String?=null
var hasMore = true var hasMore = true
...@@ -75,23 +76,23 @@ class ExpertSearchAdapter( ...@@ -75,23 +76,23 @@ class ExpertSearchAdapter(
headConfig headConfig
) )
//姓名 //姓名
holder.tvName.text = itemBean.name holder.tvName.text = itemBean.doctor_name
//服务中 //服务中
if (itemBean.inConsult || itemBean.isListening) { if (itemBean.consult_status==2 || itemBean.listen_status==2) {
holder.imgHead_online_server.visibility = View.VISIBLE holder.imgHead_online_server.visibility = View.VISIBLE
holder.chat_people_in_question.visibility = View.GONE holder.chat_people_in_question.visibility = View.GONE
holder.imgHead_online.visibility = View.GONE holder.imgHead_online.visibility = View.GONE
} else { } else {
//不是服务中且问询人数大于0 //不是服务中且问询人数大于0
when { when {
itemBean.chatNum > 5 -> { itemBean.chat_num > 5 -> {
holder.chat_people_in_question.visibility = View.VISIBLE holder.chat_people_in_question.visibility = View.VISIBLE
holder.chat_people_in_question.text = "多人在问询" holder.chat_people_in_question.text = "多人在问询"
} }
itemBean.chatNum > 0 -> { itemBean.chat_num > 0 -> {
holder.chat_people_in_question.visibility = View.VISIBLE holder.chat_people_in_question.visibility = View.VISIBLE
holder.chat_people_in_question.text = "${itemBean.chatNum}人在问询" holder.chat_people_in_question.text = "${itemBean.chat_num}人在问询"
} }
else -> { else -> {
holder.chat_people_in_question.visibility = View.GONE holder.chat_people_in_question.visibility = View.GONE
...@@ -99,7 +100,7 @@ class ExpertSearchAdapter( ...@@ -99,7 +100,7 @@ class ExpertSearchAdapter(
} }
//可预约 //可预约
holder.imgHead_online_server.visibility = View.GONE holder.imgHead_online_server.visibility = View.GONE
if (itemBean.isTodayFree == true) { if (itemBean.booking_status <4) {
holder.imgHead_online.visibility = View.VISIBLE holder.imgHead_online.visibility = View.VISIBLE
} else { } else {
holder.imgHead_online.visibility = View.GONE holder.imgHead_online.visibility = View.GONE
...@@ -115,10 +116,10 @@ class ExpertSearchAdapter( ...@@ -115,10 +116,10 @@ class ExpertSearchAdapter(
} }
//公益图标,不与其他图标冲突 //公益图标,不与其他图标冲突
if (1 == itemBean.hasServiceFree) { if (1 == itemBean.has_servicefree_consult) {
if (null != itemBean.tagsIcon && !TextUtils.isEmpty(itemBean.tagsIcon.serviceFreeIcon)) { if (null != itemBean.icons && !TextUtils.isEmpty(itemBean.icons.service_free_icon)) {
expertSearchView.showImage( expertSearchView.showImage(
itemBean.tagsIcon.serviceFreeIcon, itemBean.icons.service_free_icon,
holder.imgServiceFree holder.imgServiceFree
) )
} else { } else {
...@@ -133,8 +134,8 @@ class ExpertSearchAdapter( ...@@ -133,8 +134,8 @@ class ExpertSearchAdapter(
} }
// 展示了抗疫,就不展示其他标签 // 展示了抗疫,就不展示其他标签
if (itemBean.fightEpidemicIconShow) { if (itemBean.fightEpidemicIconShow) {
itemBean.tagsIcon?.fightEpidemicIcon?.let { itemBean.icons?.fight_epidemic_icon?.let {
GlideApp.with(context).load(itemBean.tagsIcon?.fightEpidemicIcon) GlideApp.with(context).load(itemBean.icons?.fight_epidemic_icon)
.into(holder.imgFightEpidemicIcon) .into(holder.imgFightEpidemicIcon)
holder.imgFightEpidemicIcon.visibility = View.VISIBLE holder.imgFightEpidemicIcon.visibility = View.VISIBLE
} }
...@@ -182,10 +183,10 @@ class ExpertSearchAdapter( ...@@ -182,10 +183,10 @@ class ExpertSearchAdapter(
holder.imgActivity.visibility = View.GONE holder.imgActivity.visibility = View.GONE
} }
//新驻图标 //新驻图标
if (itemBean.isNewEnter) { if (itemBean.is_new_enter) {
if (null != itemBean.tagsIcon && !TextUtils.isEmpty(itemBean.tagsIcon.newEnterIcon)) { if (null != itemBean.icons && !TextUtils.isEmpty(itemBean.icons.new_enter_icon)) {
expertSearchView.showImage( expertSearchView.showImage(
itemBean.tagsIcon.newEnterIcon, itemBean.icons.new_enter_icon,
holder.imgNewEnter holder.imgNewEnter
) )
} else { } else {
...@@ -206,10 +207,10 @@ class ExpertSearchAdapter( ...@@ -206,10 +207,10 @@ class ExpertSearchAdapter(
holder.ll_feedbackRate, holder.ll_feedbackRate,
false false
) )
if (itemBean.feedbackRate >= num) { if (itemBean.evaluation_average_score >= num) {
(view.imgRate as ImageView).background = (view.imgRate as ImageView).background =
context.resources.getDrawable(R.drawable.consultant_expert_search_full_star) context.resources.getDrawable(R.drawable.consultant_expert_search_full_star)
} else if (itemBean.feedbackRate < num && itemBean.feedbackRate > num - 1) { } else if (itemBean.evaluation_average_score < num && itemBean.evaluation_average_score > num - 1) {
(view.imgRate as ImageView).background = (view.imgRate as ImageView).background =
context.resources.getDrawable(R.drawable.consultant_expert_search_half_star) context.resources.getDrawable(R.drawable.consultant_expert_search_half_star)
} else { } else {
...@@ -221,9 +222,9 @@ class ExpertSearchAdapter( ...@@ -221,9 +222,9 @@ class ExpertSearchAdapter(
//XXX人点评 //XXX人点评
val numSb = StringBuffer() val numSb = StringBuffer()
holder.tv_zixunOrderNum.text = holder.tv_zixunOrderNum.text =
numSb.append(itemBean.zixunOrderNum).append("").toString() numSb.append(itemBean.evaluate_num).append("").toString()
//咨询师简介 //咨询师简介
holder.tvTeamCertifications.text = itemBean.teamCertifications holder.tvTeamCertifications.text = itemBean.title
//咨询师标签 //咨询师标签
holder.ll_tags.removeAllViews() holder.ll_tags.removeAllViews()
itemBean.tagList?.let { itemBean.tagList?.let {
...@@ -250,9 +251,9 @@ class ExpertSearchAdapter( ...@@ -250,9 +251,9 @@ class ExpertSearchAdapter(
} }
//帮助人数 //帮助人数
val orderUser = StringBuffer() val orderUser = StringBuffer()
holder.tvOrderNum.text = orderUser.append(itemBean.zixunOrderUser).append("").toString() holder.tvOrderNum.text = orderUser.append(itemBean.help_num).append("").toString()
//私聊文案 //私聊文案
if (TextUtils.isEmpty(itemBean.chatBtnText)) { if (TextUtils.isEmpty(itemBean.chat_btn_text)) {
holder.tvChat.text = "私聊" holder.tvChat.text = "私聊"
holder.tvChat.setTextColor( holder.tvChat.setTextColor(
ContextCompat.getColor( ContextCompat.getColor(
...@@ -264,7 +265,7 @@ class ExpertSearchAdapter( ...@@ -264,7 +265,7 @@ class ExpertSearchAdapter(
holder.tvChat.background = holder.tvChat.background =
ContextCompat.getDrawable(context, R.drawable.consultant_expert_search_chat) ContextCompat.getDrawable(context, R.drawable.consultant_expert_search_chat)
} else { } else {
holder.tvChat.text = itemBean.chatBtnText holder.tvChat.text = itemBean.chat_btn_text
holder.tvChat.setTextColor( holder.tvChat.setTextColor(
ContextCompat.getColor( ContextCompat.getColor(
context, context,
...@@ -278,36 +279,35 @@ class ExpertSearchAdapter( ...@@ -278,36 +279,35 @@ class ExpertSearchAdapter(
} }
//服务时长 //服务时长
val durationStringBuffer = StringBuffer() val durationStringBuffer = StringBuffer()
holder.tvSaleDurationForMonth.text = holder.tvSaleDurationForMonth.text = durationStringBuffer.append(itemBean.sum_service_time.toInt()).append("").toString()
durationStringBuffer.append(itemBean.allSaleDuration.toInt()).append("").toString()
//价格 //价格
val price = BigDecimal(itemBean.minBookingPrice) val price = BigDecimal(itemBean.min_price)
// 去掉末尾无用的.00 // 去掉末尾无用的.00
holder.tvPrice.text = price.stripTrailingZeros().toPlainString() holder.tvPrice.text = price.stripTrailingZeros().toPlainString()
//套餐 //套餐
holder.ll_products.removeAllViews() holder.ll_products.removeAllViews()
if (null != itemBean.products && !itemBean.products.isEmpty()) { if (null != itemBean.doctor_products && itemBean.doctor_products.isNotEmpty()) {
for (item in itemBean.products) { for (item in itemBean.doctor_products) {
val view = LayoutInflater.from(context).inflate( val view = LayoutInflater.from(context).inflate(
R.layout.consultant_expert_search_products_item, R.layout.consultant_expert_search_products_item,
holder.ll_tags, holder.ll_tags,
false false
) )
when (item.isPackage) { when (item.product_type) {
1 -> { "1" -> {
view.tvTitle.text = "单次" view.tvTitle.text = "单次"
view.tvTitle.setTextColor(context.resources.getColor(R.color.platform_color_1DA1F2)) view.tvTitle.setTextColor(context.resources.getColor(R.color.platform_color_1DA1F2))
view.tvTitle.background = view.tvTitle.background =
context.resources.getDrawable(R.drawable.consultant_expert_search_single) context.resources.getDrawable(R.drawable.consultant_expert_search_single)
view.tvContent.text = item.name view.tvContent.text = item.product_name
holder.ll_products.addView(view) holder.ll_products.addView(view)
} }
2 -> { "2" -> {
view.tvTitle.text = "套餐" view.tvTitle.text = "套餐"
view.tvTitle.setTextColor(context.resources.getColor(R.color.consultant_color_FF9500)) view.tvTitle.setTextColor(context.resources.getColor(R.color.consultant_color_FF9500))
view.tvTitle.background = view.tvTitle.background =
context.resources.getDrawable(R.drawable.consultant_expert_search_menu) context.resources.getDrawable(R.drawable.consultant_expert_search_menu)
view.tvContent.text = item.name view.tvContent.text = item.product_name
holder.ll_products.addView(view) holder.ll_products.addView(view)
} }
else -> { else -> {
...@@ -319,11 +319,12 @@ class ExpertSearchAdapter( ...@@ -319,11 +319,12 @@ class ExpertSearchAdapter(
} else if (holder is FooterViewHolder) { } else if (holder is FooterViewHolder) {
LogUtil.e("${listData.size}")
if (hasMore) { if (hasMore) {
holder.itemView.visibility = View.VISIBLE holder.itemView.visibility = View.VISIBLE
holder.pbLoading.visibility = View.VISIBLE holder.pbLoading.visibility = View.VISIBLE
holder.tvHint.text = context.getString(R.string.consultant_loading) holder.tvHint.text = context.getString(R.string.consultant_loading)
} else { } else{
holder.pbLoading.visibility = View.GONE holder.pbLoading.visibility = View.GONE
holder.tvHint.text = context.getString(R.string.platform_no_more) holder.tvHint.text = context.getString(R.string.platform_no_more)
} }
...@@ -345,8 +346,7 @@ class ExpertSearchAdapter( ...@@ -345,8 +346,7 @@ class ExpertSearchAdapter(
NormalViewHolder(view) NormalViewHolder(view)
} }
FOOT_VIEW -> { FOOT_VIEW -> {
val view = LayoutInflater.from(context) val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_footer, parent, false)
.inflate(R.layout.consultant_item_footer, parent, false)
FooterViewHolder(view) FooterViewHolder(view)
} }
else -> { else -> {
...@@ -422,7 +422,7 @@ class ExpertSearchAdapter( ...@@ -422,7 +422,7 @@ class ExpertSearchAdapter(
//跳转专家主页 //跳转专家主页
if (adapterPosition != RecyclerView.NO_POSITION) { if (adapterPosition != RecyclerView.NO_POSITION) {
val itemBean = listData[adapterPosition] val itemBean = listData[adapterPosition]
var linkUrl = itemBean.linkUrl var linkUrl = itemBean.link_url
if (!TextUtils.isEmpty(cateId)) { if (!TextUtils.isEmpty(cateId)) {
linkUrl = URLUtils.appendParmas(linkUrl, "cateId", cateId) linkUrl = URLUtils.appendParmas(linkUrl, "cateId", cateId)
...@@ -431,12 +431,12 @@ class ExpertSearchAdapter( ...@@ -431,12 +431,12 @@ class ExpertSearchAdapter(
if (pageIndex == 0) { if (pageIndex == 0) {
ActionCountUtils.count( ActionCountUtils.count(
ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_DOCTOR_CLICK, ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_DOCTOR_CLICK,
itemBean.doctorId ?: "" itemBean.id ?: ""
) )
} else { } else {
ActionCountUtils.count( ActionCountUtils.count(
ConsultBIConstants.ConsultSearchListEvent.APP_CONSULT_SEARCH_LIST_CONSULT_ITEM_CLICK, ConsultBIConstants.ConsultSearchListEvent.APP_CONSULT_SEARCH_LIST_CONSULT_ITEM_CLICK,
itemBean.doctorId ?: "" itemBean.id ?: ""
) )
} }
...@@ -450,12 +450,12 @@ class ExpertSearchAdapter( ...@@ -450,12 +450,12 @@ class ExpertSearchAdapter(
if (pageIndex == 0) { if (pageIndex == 0) {
ActionCountUtils.count( ActionCountUtils.count(
ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_CHAT_CLICK, ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_CHAT_CLICK,
doctor.doctorId ?: "" doctor.id ?: ""
) )
} else { } else {
ActionCountUtils.count( ActionCountUtils.count(
ConsultBIConstants.ConsultSearchListEvent.APP_CONSULT_SEARCH_LIST_CHAT_CLICK, ConsultBIConstants.ConsultSearchListEvent.APP_CONSULT_SEARCH_LIST_CHAT_CLICK,
doctor.doctorId ?: "" doctor.id ?: ""
) )
} }
//判断是否已登录 //判断是否已登录
......
package com.yidianling.consultant.adapter
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yidianling.consultant.R
import com.yidianling.consultant.model.bean.ChildrenBean
/**
* Created by Ykai on 2022/5/18.
*/
class SortAdapter(data: List<ChildrenBean>) : BaseMultiItemQuickAdapter<ChildrenBean, BaseViewHolder>(data) {
var isVisible = false
init {
addItemType(1, R.layout.consultant_item_sort1)
addItemType(2, R.layout.consultant_item_sort2)
}
override fun convert(holder: BaseViewHolder, item: ChildrenBean) {
when(holder.itemViewType){
1 ->{
holder.setGone(R.id.ll_sort_item,item.isVisible)
holder.setText(R.id.tv_sort_name, item.cate_name)
holder.getView<TextView>(R.id.tv_sort_name).isSelected = item.isSelected
if (item.isSelected){
holder.setTextColor(R.id.tv_sort_name,ContextCompat.getColor(mContext,R.color.platform_main_theme))
}else{
holder.setTextColor(R.id.tv_sort_name,ContextCompat.getColor(mContext,R.color.platform_color_242424))
}
}
2->{
holder.setGone(R.id.ll_sort_item,item.isVisible)
holder.setText(R.id.tv_sort_name, item.cate_name)
holder.getView<TextView>(R.id.tv_sort_name).isSelected = item.isSelected
if (item.isSelected){
holder.setTextColor(R.id.tv_sort_name,ContextCompat.getColor(mContext,R.color.platform_main_theme))
}else{
holder.setTextColor(R.id.tv_sort_name,ContextCompat.getColor(mContext,R.color.platform_color_242424))
}
}
}
}
/**
* 设置大于第12个之后的标签全部显示
*/
fun setAllVisible(){
mData.forEach { bean ->
bean.isVisible = true
}
notifyDataSetChanged()
isVisible = true
}
/**
* 设置大于第12个之后的标签全部隐藏
*/
fun setGone(){
mData.forEachIndexed { index, bean ->
if (index>12){
bean.isVisible = false
}
}
notifyDataSetChanged()
isVisible = false
}
}
\ No newline at end of file
...@@ -31,7 +31,7 @@ class SortRecyclerViewAdapter(private val context: Context, ...@@ -31,7 +31,7 @@ class SortRecyclerViewAdapter(private val context: Context,
val item = sortItems[position] val item = sortItems[position]
holder.tvSort.text = item.value holder.tvSort.text = item.value
if (item.key == selectedSort.key) { if (item.key == selectedSort.key) {
holder.tvSort.setTypeface(Typeface.DEFAULT_BOLD) holder.tvSort.typeface = Typeface.DEFAULT_BOLD
holder.tvSort.setTextColor(ContextCompat.getColor(context, R.color.platform_main_theme)) holder.tvSort.setTextColor(ContextCompat.getColor(context, R.color.platform_main_theme))
// holder.ivCheck.visibility = View.VISIBLE // holder.ivCheck.visibility = View.VISIBLE
} }
......
...@@ -11,8 +11,8 @@ data class ExpertSearchProductsBean( ...@@ -11,8 +11,8 @@ data class ExpertSearchProductsBean(
/** /**
* 1.单次/2.套餐 * 1.单次/2.套餐
*/ */
val isPackage : Int?, val product_type: String?,
/** /**
* 套餐名称 * 套餐名称
*/ */
val name : String?) val product_name : String?)
\ No newline at end of file \ No newline at end of file
...@@ -11,16 +11,16 @@ data class ExpertSearchTagsIconBean( ...@@ -11,16 +11,16 @@ data class ExpertSearchTagsIconBean(
/** /**
* 优质图标 * 优质图标
*/ */
val abilityLevelIcon : String?, val ability_level_icon : String?,
/** /**
* 公益图标 * 公益图标
*/ */
val serviceFreeIcon : String?, val service_free_icon : String?,
/** /**
* 新入驻图标 * 新入驻图标
*/ */
val newEnterIcon : String?, val new_enter_icon : String?,
/** /**
* 抗疫先锋图标地址 * 抗疫先锋图标地址
*/ */
var fightEpidemicIcon: String? = null) var fight_epidemic_icon: String? = null)
\ No newline at end of file \ No newline at end of file
...@@ -5,8 +5,7 @@ import com.ydl.ydlcommon.data.http.BaseAPIResponse ...@@ -5,8 +5,7 @@ import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlnet.YDLHttpUtils import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.consultant.bean.ExpertSearchTopShowBean import com.yidianling.consultant.bean.ExpertSearchTopShowBean
import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.model.bean.ExpertBannerBean import com.yidianling.consultant.model.bean.ExpertBean
import com.yidianling.consultant.model.bean.ExpertSearchBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -45,9 +44,13 @@ class ExpertSearchHttpImpl : IExpertSearchHttp { ...@@ -45,9 +44,13 @@ class ExpertSearchHttpImpl : IExpertSearchHttp {
return searchApi!! return searchApi!!
} }
override fun searchDoctor(params: String?): Observable<BaseAPIResponse<ExpertSearchBean>> { // override fun searchDoctor(params: String?): Observable<BaseAPIResponse<ExpertSearchBean>> {
return getSearchApi().searchDoctorService(HttpConfig.JAVA_BASE_URL+ "doctor/nlist?"+params) // return getSearchApi().searchDoctorService(HttpConfig.JAVA_BASE_URL+ "doctor/nlist?"+params)
//
// }
override fun getExpertList(map: Map<String, Any>): Observable<BaseAPIResponse<ExpertBean>> {
return getSearchApi().getExpertList(map)
} }
override fun getBigShotData(): Observable<BaseAPIResponse<ExpertSearchTopShowBean>> { override fun getBigShotData(): Observable<BaseAPIResponse<ExpertSearchTopShowBean>> {
......
...@@ -2,8 +2,7 @@ package com.yidianling.consultant.http ...@@ -2,8 +2,7 @@ package com.yidianling.consultant.http
import com.ydl.ydlcommon.data.http.BaseAPIResponse import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.consultant.bean.ExpertSearchTopShowBean import com.yidianling.consultant.bean.ExpertSearchTopShowBean
import com.yidianling.consultant.model.bean.ExpertBannerBean import com.yidianling.consultant.model.bean.ExpertBean
import com.yidianling.consultant.model.bean.ExpertSearchBean
import io.reactivex.Observable import io.reactivex.Observable
/** /**
...@@ -17,7 +16,12 @@ interface IExpertSearchHttp{ ...@@ -17,7 +16,12 @@ interface IExpertSearchHttp{
/** /**
* 专家搜索页请求 * 专家搜索页请求
*/ */
fun searchDoctor(params : String?): Observable<BaseAPIResponse<ExpertSearchBean>> // fun searchDoctor(params : String?): Observable<BaseAPIResponse<ExpertSearchBean>>
/**
* 获取专家列表
*/
fun getExpertList(map:Map<String,Any>): Observable<BaseAPIResponse<ExpertBean>>
/** /**
* 获取当前筛选条件结果数 * 获取当前筛选条件结果数
......
package com.yidianling.consultant.layoutmanager;
import android.graphics.Rect;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ykai on 2022/2/21.
* 流式布局layoutManager
*/
public class FlowLayoutManager extends RecyclerView.LayoutManager {
private static final String TAG = FlowLayoutManager.class.getSimpleName();
final FlowLayoutManager self = this;
protected int width, height;
private int left, top, right;
//最大容器的宽度
private int usedMaxWidth;
//竖直方向上的偏移量
private int verticalScrollOffset = 0;
public int getTotalHeight() {
return totalHeight;
}
//计算显示的内容的高度
protected int totalHeight = 0;
private Row row = new Row();
private List<Row> lineRows = new ArrayList<>();
//保存所有的Item的上下左右的偏移量信息
private SparseArray<Rect> allItemFrames = new SparseArray<>();
public FlowLayoutManager() {
//设置主动测量规则,适应recyclerView高度为wrap_content
setAutoMeasureEnabled(true);
}
//每个item的定义
public class Item {
int useHeight;
View view;
public void setRect(Rect rect) {
this.rect = rect;
}
Rect rect;
public Item(int useHeight, View view, Rect rect) {
this.useHeight = useHeight;
this.view = view;
this.rect = rect;
}
}
//行信息的定义
public class Row {
public void setCuTop(float cuTop) {
this.cuTop = cuTop;
}
public void setMaxHeight(float maxHeight) {
this.maxHeight = maxHeight;
}
//每一行的头部坐标
float cuTop;
//每一行需要占据的最大高度
float maxHeight;
//每一行存储的item
List<Item> views = new ArrayList<>();
public void addViews(Item view) {
views.add(view);
}
}
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
//该方法主要用来获取每一个item在屏幕上占据的位置
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
Log.d(TAG, "onLayoutChildren");
totalHeight = 0;
int cuLineTop = top;
//当前行使用的宽度
int cuLineWidth = 0;
int itemLeft;
int itemTop;
int maxHeightItem = 0;
row = new Row();
lineRows.clear();
allItemFrames.clear();
removeAllViews();
if (getItemCount() == 0) {
detachAndScrapAttachedViews(recycler);
verticalScrollOffset = 0;
return;
}
if (getChildCount() == 0 && state.isPreLayout()) {
return;
}
//onLayoutChildren方法在RecyclerView 初始化时 会执行两遍
detachAndScrapAttachedViews(recycler);
if (getChildCount() == 0) {
width = getWidth();
height = getHeight();
left = getPaddingLeft();
right = getPaddingRight();
top = getPaddingTop();
usedMaxWidth = width - left - right;
}
for (int i = 0; i < getItemCount(); i++) {
Log.d(TAG, "index:" + i);
View childAt = recycler.getViewForPosition(i);
if (View.GONE == childAt.getVisibility()) {
continue;
}
measureChildWithMargins(childAt, 0, 0);
int childWidth = getDecoratedMeasuredWidth(childAt);
int childHeight = getDecoratedMeasuredHeight(childAt);
int childUseWidth = childWidth;
int childUseHeight = childHeight;
//如果加上当前的item还小于最大的宽度的话
if (cuLineWidth + childUseWidth <= usedMaxWidth) {
itemLeft = left + cuLineWidth;
itemTop = cuLineTop;
Rect frame = allItemFrames.get(i);
if (frame == null) {
frame = new Rect();
}
frame.set(itemLeft, itemTop, itemLeft + childWidth, itemTop + childHeight);
allItemFrames.put(i, frame);
cuLineWidth += childUseWidth;
maxHeightItem = Math.max(maxHeightItem, childUseHeight);
row.addViews(new Item(childUseHeight, childAt, frame));
} else {
//换行
formatAboveRow();
cuLineTop += maxHeightItem;
totalHeight += maxHeightItem;
itemTop = cuLineTop;
itemLeft = left;
Rect frame = allItemFrames.get(i);
if (frame == null) {
frame = new Rect();
}
frame.set(itemLeft, itemTop, itemLeft + childWidth, itemTop + childHeight);
allItemFrames.put(i, frame);
cuLineWidth = childUseWidth;
maxHeightItem = childUseHeight;
row.addViews(new Item(childUseHeight, childAt, frame));
}
row.setCuTop(cuLineTop);
row.setMaxHeight(maxHeightItem);
//不要忘了最后一行进行刷新下布局
if (i == getItemCount() - 1) {
formatAboveRow();
totalHeight += maxHeightItem;
}
}
totalHeight = Math.max(totalHeight, getVerticalSpace());
Log.d(TAG, "onLayoutChildren totalHeight:" + totalHeight);
fillLayout(recycler, state);
}
//对出现在屏幕上的item进行展示,超出屏幕的item回收到缓存中
private void fillLayout(RecyclerView.Recycler recycler, RecyclerView.State state) {
if (state.isPreLayout() || getItemCount() == 0) { // 跳过preLayout,preLayout主要用于支持动画
return;
}
// 当前scroll offset状态下的显示区域
Rect displayFrame = new Rect(getPaddingLeft(), getPaddingTop() + verticalScrollOffset, getWidth() - getPaddingRight(), verticalScrollOffset + (getHeight() - getPaddingBottom()));
//对所有的行信息进行遍历
for (int j = 0; j < lineRows.size(); j++) {
Row row = lineRows.get(j);
float lineTop = row.cuTop;
float lineBottom = lineTop + row.maxHeight;
//如果该行在屏幕中,进行放置item
// if (lineTop < displayFrame.bottom && displayFrame.top < lineBottom) {
List<Item> views = row.views;
for (int i = 0; i < views.size(); i++) {
View scrap = views.get(i).view;
measureChildWithMargins(scrap, 0, 0);
addView(scrap);
Rect frame = views.get(i).rect;
//将这个item布局出来
layoutDecoratedWithMargins(scrap, frame.left, frame.top - verticalScrollOffset, frame.right, frame.bottom - verticalScrollOffset);
}
// } else {
// //将不在屏幕中的item放到缓存中
// List<Item> views = row.views;
// for (int i = 0; i < views.size(); i++) {
// View scrap = views.get(i).view;
// removeAndRecycleView(scrap, recycler);
// }
// }
}
}
/**
* 计算每一行没有居中的viewgroup,让居中显示
*/
private void formatAboveRow() {
List<Item> views = row.views;
for (int i = 0; i < views.size(); i++) {
Item item = views.get(i);
View view = item.view;
int position = getPosition(view);
//如果该item的位置不在该行中间位置的话,进行重新放置
if (allItemFrames.get(position).top < row.cuTop + (row.maxHeight - views.get(i).useHeight) / 2) {
Rect frame = allItemFrames.get(position);
if (frame == null) {
frame = new Rect();
}
frame.set(allItemFrames.get(position).left, (int) (row.cuTop + (row.maxHeight - views.get(i).useHeight) / 2),
allItemFrames.get(position).right, (int) (row.cuTop + (row.maxHeight - views.get(i).useHeight) / 2 + getDecoratedMeasuredHeight(view)));
allItemFrames.put(position, frame);
item.setRect(frame);
views.set(i, item);
}
}
row.views = views;
lineRows.add(row);
row = new Row();
}
/**
* 竖直方向需要滑动的条件
*
* @return
*/
@Override
public boolean canScrollVertically() {
return true;
}
//监听竖直方向滑动的偏移量
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler,
RecyclerView.State state) {
Log.d("TAG", "totalHeight:" + totalHeight);
//实际要滑动的距离
int travel = dy;
//如果滑动到最顶部
if (verticalScrollOffset + dy < 0) {//限制滑动到顶部之后,不让继续向上滑动了
travel = -verticalScrollOffset;//verticalScrollOffset=0
} else if (verticalScrollOffset + dy > totalHeight - getVerticalSpace()) {//如果滑动到最底部
travel = totalHeight - getVerticalSpace() - verticalScrollOffset;//verticalScrollOffset=totalHeight - getVerticalSpace()
}
//将竖直方向的偏移量+travel
verticalScrollOffset += travel;
// 平移容器内的item
offsetChildrenVertical(-travel);
fillLayout(recycler, state);
return travel;
}
private int getVerticalSpace() {
return self.getHeight() - self.getPaddingBottom() - self.getPaddingTop();
}
public int getHorizontalSpace() {
return self.getWidth() - self.getPaddingLeft() - self.getPaddingRight();
}
}
package com.yidianling.consultant.listener package com.yidianling.consultant.listener
import com.yidianling.consultant.model.bean.CateItem
/** /**
* Created by zqk on 17-9-20. * Created by zqk on 17-9-20.
*/ */
interface OnCategoriesSelectedListener { interface OnCategoriesSelectedListener {
fun onCategoriesSelected(categories: ArrayList<CateItem>) fun onCategoriesSelected()
} }
\ No newline at end of file
...@@ -9,7 +9,7 @@ import com.ydl.ydlnet.YDLHttpUtils ...@@ -9,7 +9,7 @@ import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.consultant.bean.ExpertSearchTopShowBean import com.yidianling.consultant.bean.ExpertSearchTopShowBean
import com.yidianling.consultant.bean.GuideBean import com.yidianling.consultant.bean.GuideBean
import com.yidianling.consultant.bean.HotSearchBean import com.yidianling.consultant.bean.HotSearchBean
import com.yidianling.consultant.model.bean.ExpertSearchBean import com.yidianling.consultant.model.bean.ExpertBean
import com.yidianling.consultant.model.bean.HeadData import com.yidianling.consultant.model.bean.HeadData
import io.reactivex.Observable import io.reactivex.Observable
import retrofit2.http.* import retrofit2.http.*
...@@ -38,14 +38,23 @@ interface SearchApi { ...@@ -38,14 +38,23 @@ interface SearchApi {
fun listHead(@FieldMap maps: Map<String, String>): Observable<BaseResponse<HeadData>> fun listHead(@FieldMap maps: Map<String, String>): Observable<BaseResponse<HeadData>>
//搜索条件 //搜索条件
@GET("consult/search/v2/conditions") @GET("consult/search/v3/conditions")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA) @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
fun searchConditions(@Query("cateSource") cateSource: Int): Observable<BaseAPIResponse<HeadData>> fun searchConditions(@Query("cateSource") cateSource: Int): Observable<BaseAPIResponse<HeadData>>
//专家服务搜索 //专家服务搜索
@retrofit2.http.Headers("Content-Type:application/json") // @retrofit2.http.Headers("Content-Type:application/json")
@GET // @GET
fun searchDoctorService(@Url url: String): Observable<BaseAPIResponse<ExpertSearchBean>> // fun searchDoctorService(@Url url: String): Observable<BaseAPIResponse<ExpertSearchBean>>
/**
* 新咨询师列表接口(包含搜索、筛选咨询师)
*/
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA,"X-App-Id: plough_cloud")
@POST("smart-rank/v1/search")
fun getExpertList(@Body map: Map<String,@JvmSuppressWildcards Any>):Observable<BaseAPIResponse<ExpertBean>>
//搜索页面接口 //搜索页面接口
@retrofit2.http.Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA, "Content-Type:application/json") @retrofit2.http.Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA, "Content-Type:application/json")
......
...@@ -7,5 +7,5 @@ data class AgeItem( ...@@ -7,5 +7,5 @@ data class AgeItem(
val value: String? = null, val value: String? = null,
@field:SerializedName("key") @field:SerializedName("key")
val key: Int? = null val key: Int
) )
\ No newline at end of file
...@@ -23,5 +23,20 @@ data class AllFilter( ...@@ -23,5 +23,20 @@ data class AllFilter(
val others: ArrayList<OtherItem> = ArrayList(),//其他筛选 val others: ArrayList<OtherItem> = ArrayList(),//其他筛选
val title:ArrayList<ReorderItem> = ArrayList(), //资质 val title:ArrayList<ReorderItem> = ArrayList(), //资质
val specialityCrowd:ArrayList<SpecialityCrowdBean> = ArrayList() // 擅长人群 val specialityCrowd:ArrayList<SpecialityCrowdBean> = ArrayList(), // 擅长人群
// 八大类标签集合
val childList:ArrayList<ChildrenBean> = ArrayList(), // 亲子教育
val stressList:ArrayList<ChildrenBean> = ArrayList(), // 情绪压力
val loveEmotionList:ArrayList<ChildrenBean> = ArrayList(), // 恋爱情感
val marriedFamilyList:ArrayList<ChildrenBean> = ArrayList(), // 婚姻家庭
val personalGrowthList:ArrayList<ChildrenBean> = ArrayList(), // 个人成长
val interpersonalRelationshipList:ArrayList<ChildrenBean> = ArrayList(), // 人际关系
val careerDevelopmentList:ArrayList<ChildrenBean> = ArrayList(), // 职场发展
val mentalHealthList:ArrayList<ChildrenBean> = ArrayList(), // 心理健康
// 八大类已选中标签id集合
val categoryId2List:ArrayList<String> = ArrayList(), // 一级类目id集合
val categoryId3List:ArrayList<String> = ArrayList() // 二级类目id集合
) )
\ No newline at end of file
package com.yidianling.consultant.model.bean package com.yidianling.consultant.model.bean
import android.os.Parcel import com.chad.library.adapter.base.entity.MultiItemEntity
import android.os.Parcelable
import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName
data class CateItem( data class CateItem(
...@@ -10,30 +9,23 @@ data class CateItem( ...@@ -10,30 +9,23 @@ data class CateItem(
var cateName: String? = null, var cateName: String? = null,
@field:SerializedName("cate_id") @field:SerializedName("cate_id")
var cateId: String? = null var cateId: String? = null,
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString()
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) { @field:SerializedName("children")
parcel.writeString(cateName) var children: ArrayList<ChildrenBean>?=null
parcel.writeString(cateId) )
}
override fun describeContents(): Int { data class ChildrenBean(var cate_name: String,var cate_id:String,var isVisible: Boolean, var type: Int): MultiItemEntity {
return 0 // @field:SerializedName("cate_name")
} // var cateName: String? = null,
// @field:SerializedName("cate_id")
// var cateId: String? = null,
companion object CREATOR : Parcelable.Creator<CateItem> { // var isVisible: Boolean = false // 是否显示
override fun createFromParcel(parcel: Parcel): CateItem { var isSelected: Boolean = false // 是否选中
return CateItem(parcel)
}
override fun newArray(size: Int): Array<CateItem?> { override fun getItemType(): Int {
return arrayOfNulls(size) return type
}
} }
} }
\ No newline at end of file
...@@ -8,7 +8,7 @@ data class EnquiryItem( ...@@ -8,7 +8,7 @@ data class EnquiryItem(
val value: String? = null, val value: String? = null,
@field:SerializedName("key") @field:SerializedName("key")
val key: Int? = null, val key: Int,
val checkRrl: String?, val checkRrl: String?,
val unCheckUrl: String? val unCheckUrl: String?
......
package com.yidianling.consultant.model.bean
/**
* @author yuanWai
* @描述:专家搜索页数据bean
* @Copyright Copyright (c) 2018
* @Company 壹点灵
* @date 2018/12/11
*/
data class ExpertBean(
val amount : Int = 0,
val skip : Int = 0,
val limit : Int = 0,
val size : Int = 10,
val objects : MutableList<ExpertServiceItem>?,
// 分页需要
val extras: Extras?)
data class Extras(
val skips: HashMap<String, Int>
)
\ No newline at end of file
package com.yidianling.consultant.model.bean
/**
* @author yuanWai
* @描述:专家搜索页数据bean
* @Copyright Copyright (c) 2018
* @Company 壹点灵
* @date 2018/12/11
*/
data class ExpertSearchBean(val endRow : Int = 0,
val hasNextPage : Boolean = false,
val hasPreviousPage : Boolean = false,
val isFirstPage : Boolean = false,
val isLastPage : Boolean = false,
/**
* 数据列表
*/
val list : MutableList<DoctorServiceItem>?,
val navigateFirstPage : Int = 0,
val navigateLastPage : Int = 0,
val navigatePages : Int = 0,
val navigatepageNums : MutableList<Int>?,
val nextPage : Int = 0,
val pageNum : Int = 0,
val pageSize : Int = 0,
/**
* 总页数
*/
val pages : Int = 0,
val prePage : Int = 0,
val size : Int = 0,
val startRow : Int = 0,
/**
* 数据总条数
*/
val total : Int = 0)
\ No newline at end of file
...@@ -10,11 +10,11 @@ import com.yidianling.consultant.bean.ExpertSearchTagsIconBean ...@@ -10,11 +10,11 @@ import com.yidianling.consultant.bean.ExpertSearchTagsIconBean
* @Company 壹点灵 * @Company 壹点灵
* @date 2018/12/11 * @date 2018/12/11
*/ */
data class DoctorServiceItem( data class ExpertServiceItem(
/** /**
* 专家ID * 专家ID
*/ */
val doctorId: String?, val id: String?,
/** /**
* 专家uid * 专家uid
*/ */
...@@ -22,11 +22,11 @@ data class DoctorServiceItem( ...@@ -22,11 +22,11 @@ data class DoctorServiceItem(
/** /**
* 专家名称 * 专家名称
*/ */
val name: String?, val doctor_name: String?,
/** /**
* 跳转路由地址(正常为专家主页地址) * 跳转路由地址(正常为专家主页地址)
*/ */
val linkUrl: String?, val link_url: String?,
/** /**
* 专家头像地址 * 专家头像地址
*/ */
...@@ -34,7 +34,7 @@ data class DoctorServiceItem( ...@@ -34,7 +34,7 @@ data class DoctorServiceItem(
/** /**
* 专家是否在线 1.在线 * 专家是否在线 1.在线
*/ */
val isOnline: Int?, val chat_status: Int?,
/** /**
* 能力等级 1.实习 2.新手 3.精英 * 能力等级 1.实习 2.新手 3.精英
*/ */
...@@ -42,7 +42,7 @@ data class DoctorServiceItem( ...@@ -42,7 +42,7 @@ data class DoctorServiceItem(
/** /**
* 有免费咨询:1.有,2.无 * 有免费咨询:1.有,2.无
*/ */
val hasServiceFree: Int?, val has_servicefree_consult: Int?,
/** /**
* 活动图标 * 活动图标
*/ */
...@@ -54,11 +54,11 @@ data class DoctorServiceItem( ...@@ -54,11 +54,11 @@ data class DoctorServiceItem(
/** /**
* 是否新入驻:true:是,false:否 * 是否新入驻:true:是,false:否
*/ */
var isNewEnter: Boolean = false, var is_new_enter: Boolean = false,
/** /**
* 好评率(倾诉+咨询) * 好评率(倾诉+咨询)
*/ */
var feedbackRate: Float = 0f, var evaluation_average_score: Float = 0f,
/** /**
* 是否抗疫先锋图标 * 是否抗疫先锋图标
*/ */
...@@ -66,59 +66,55 @@ data class DoctorServiceItem( ...@@ -66,59 +66,55 @@ data class DoctorServiceItem(
/** /**
* 评价数(咨询订单数) * 评价数(咨询订单数)
*/ */
var zixunOrderNum: Int = 0, var evaluate_num: Int = 0,
/** /**
* 咨询最低价 * 咨询最低价
*/ */
val minBookingPrice: String?, val min_price: String?,
/** /**
* 资质材料 * 资质材料
*/ */
val teamCertifications: String?, val title: String?,
/**
* 标签分类
*/
val tags: String?,
/** /**
* 已帮助人数(咨询人数) * 已帮助人数(咨询人数)
*/ */
val zixunOrderUser: String?, val help_num: String?,
/** /**
* 月售时长 * 月售时长
*/ */
var saleDurationForMonth: Float = 0f, var p30d_sold_hour: Float = 0f,
/** /**
* 服务时长 * 服务时长
*/ */
var allSaleDuration: Float = 0f, var sum_service_time: Float = 0f,
/** /**
* 服务 * 服务
*/ */
val products: MutableList<ExpertSearchProductsBean>?, val doctor_products: MutableList<ExpertSearchProductsBean>?,
/** /**
* 标签图片 * 标签图片
*/ */
val tagsIcon: ExpertSearchTagsIconBean?, val icons: ExpertSearchTagsIconBean?,
/** /**
* 今日是否可约 * 今日是否可约
*/ */
val isTodayFree: Boolean?, val booking_status: Int,
/** /**
* 是否咨询 * 咨询状态 1-待服务 2-服务
*/ */
var inConsult: Boolean = false, var consult_status: Int,
/** /**
* 是否聆听 * 倾诉状态 1-待服务 2-服务
*/ */
var isListening: Boolean = false, var listen_status: Int,
/** /**
* 私聊人数 * 私聊人数
*/ */
var chatNum: Int = 0, var chat_num: Int = 0,
/** /**
* 个人铭言 * 个人铭言
*/ */
val famousRemark: String?, val famous_remark: String?,
/** /**
* 省 * 省
*/ */
...@@ -130,7 +126,7 @@ data class DoctorServiceItem( ...@@ -130,7 +126,7 @@ data class DoctorServiceItem(
/** /**
* 私聊按钮的文案(如果不为空则取这个字段的值,如果为空 则默认为:“私聊”) * 私聊按钮的文案(如果不为空则取这个字段的值,如果为空 则默认为:“私聊”)
*/ */
val chatBtnText: String?, val chat_btn_text: String?,
/** /**
* 新标签分类 * 新标签分类
......
...@@ -45,12 +45,6 @@ data class Filters( ...@@ -45,12 +45,6 @@ data class Filters(
@field:SerializedName("title") @field:SerializedName("title")
val title: List<ReorderItem> = ArrayList(), val title: List<ReorderItem> = ArrayList(),
// /**
// * 擅长人群
// */
// @field:SerializedName("crowdsTags")
// val crowdsTags: List<AgeItem> = ArrayList()
/** /**
* 擅长人群 * 擅长人群
......
...@@ -8,5 +8,11 @@ data class OtherItem( ...@@ -8,5 +8,11 @@ data class OtherItem(
val value: String? = null, val value: String? = null,
@field:SerializedName("key") @field:SerializedName("key")
val key: Int? = null val key: Int? = null,
@field:SerializedName("value1")
val value1: String,
@field:SerializedName("key1")
val key1: String
) )
\ No newline at end of file
...@@ -8,5 +8,11 @@ data class ReorderItem( ...@@ -8,5 +8,11 @@ data class ReorderItem(
var value: String? = null, var value: String? = null,
@field:SerializedName("key") @field:SerializedName("key")
var key: String? = null var key: String? = null,
@field:SerializedName("value1")
var value1: String="",
@field:SerializedName("key1")
var key1: String=""
) )
\ No newline at end of file
//package com.yidianling.consultant.model.bean;
//
//import com.chad.library.adapter.base.entity.MultiItemEntity;
//
///**
// * Created by Ykai on 2022/5/18.
// */
//
//public class SortBean implements MultiItemEntity {
// public String name;
// int type;
// public boolean isVisible; // 是否显示
// public boolean isSelected; // 是否选中
//
//
// public SortBean(String name, int type){
// this.name = name;
// this.type = type;
// isVisible = true;
// }
//
// @Override
// public int getItemType() {
// return type;
// }
//}
...@@ -53,7 +53,7 @@ object TempH5RouteUtils { ...@@ -53,7 +53,7 @@ object TempH5RouteUtils {
if (!TextUtils.isEmpty(host) && host == "h5") { if (!TextUtils.isEmpty(host) && host == "h5") {
//如果是h5,跳转至NewH5Activity //如果是h5,跳转至NewH5Activity
try { try {
var params = URLDecoder.decode(linkUri.getQueryParameter("params"),"UTF-8") val params = URLDecoder.decode(linkUri.getQueryParameter("params"),"UTF-8")
ARouter.getInstance().build("/new_h5/h5").withSerializable("routerParam", params).navigation() ARouter.getInstance().build("/new_h5/h5").withSerializable("routerParam", params).navigation()
return return
}catch (e : NullPointerException){ }catch (e : NullPointerException){
......
...@@ -2,48 +2,585 @@ package com.yidianling.consultant.ui.view ...@@ -2,48 +2,585 @@ package com.yidianling.consultant.ui.view
import android.content.Context import android.content.Context
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupWindow import android.widget.PopupWindow
import com.ydl.ydlcommon.view.SpaceItemDecorator2
import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.RxImageTool
import com.yidianling.consultant.R import com.yidianling.consultant.R
import com.yidianling.consultant.adapter.CategoryRecyclerViewAdapter import com.yidianling.consultant.adapter.SortAdapter
import com.yidianling.consultant.layoutmanager.FlowLayoutManager
import com.yidianling.consultant.listener.OnCategoriesSelectedListener import com.yidianling.consultant.listener.OnCategoriesSelectedListener
import com.yidianling.consultant.model.bean.CateItem import com.yidianling.consultant.model.bean.AllFilter
import com.yidianling.consultant.model.bean.ChildrenBean
import kotlinx.android.synthetic.main.consultant_ui_subject_popup_window.view.* import kotlinx.android.synthetic.main.consultant_ui_subject_popup_window.view.*
/** /**
* 主题弹窗 * 主题弹窗
* Created by zqk on 17-9-15. * Created by zqk on 17-9-15.
*/ */
class CategoryPopupWindow(context: Context, categories: ArrayList<CateItem>, selectedCategories: ArrayList<CateItem>) class CategoryPopupWindow(context: Context,allFilter:AllFilter) : PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, RxImageTool.dp2px(566f)) {
: PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) { private var view:View = LayoutInflater.from(context).inflate(R.layout.consultant_ui_subject_popup_window, null)
var mAllFilter:AllFilter
private lateinit var ivSortChildEducationOpen: ImageView
private lateinit var ivSortEmotionalStress: ImageView
private lateinit var ivSortLoveEmotion: ImageView
private lateinit var ivSortMarriedFamily: ImageView
private lateinit var ivSortPersonalGrowth: ImageView
private lateinit var ivSortInterpersonalRelationship: ImageView
private lateinit var ivSortCareerDevelopment: ImageView
private lateinit var ivSortMentalHealth: ImageView
var onSubjectsSelectedListener: OnCategoriesSelectedListener? = null var onSubjectsSelectedListener: OnCategoriesSelectedListener? = null
private val childList = ArrayList<ChildrenBean>()
private val stressList = ArrayList<ChildrenBean>()
private val loveEmotionList = ArrayList<ChildrenBean>()
private val marriedFamilyList = ArrayList<ChildrenBean>()
private val personalGrowthList = ArrayList<ChildrenBean>()
private val interpersonalRelationshipList = ArrayList<ChildrenBean>()
private val careerDevelopmentList = ArrayList<ChildrenBean>()
private val mentalHealthList = ArrayList<ChildrenBean>()
private val chooseChildIndexList = ArrayList<Int>()
private val chooseStressIndexList = ArrayList<Int>()
private val chooseLoveEmotionIndexList = ArrayList<Int>()
private val chooseMarriedFamilyIndexList = ArrayList<Int>()
private val choosePersonalGrowthIndexList = ArrayList<Int>()
private val chooseInterpersonalRelationshipIndexList = ArrayList<Int>()
private val chooseCareerDevelopmentIndexList = ArrayList<Int>()
private val chooseMentalHealthIndexList = ArrayList<Int>()
private lateinit var childEducationAdapter:SortAdapter
private lateinit var stressAdapter:SortAdapter
private lateinit var loveEmotionAdapter:SortAdapter
private lateinit var marriedFamilyAdapter:SortAdapter
private lateinit var personalGrowthAdapter:SortAdapter
private lateinit var interpersonalRelationshipAdapter:SortAdapter
private lateinit var careerDevelopmentAdapter:SortAdapter
private lateinit var mentalHealthAdapter:SortAdapter
init { init {
val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_subject_popup_window, null)
this.contentView = view this.contentView = view
this.isFocusable = true this.isFocusable = true
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
this.setBackgroundDrawable(BitmapDrawable()) this.setBackgroundDrawable(BitmapDrawable())
this.isOutsideTouchable = true this.isOutsideTouchable = true
val rvSubject = view.rvSubject mAllFilter = allFilter
val adapter = CategoryRecyclerViewAdapter(context, categories, selectedCategories) initView()
rvSubject.adapter = adapter }
rvSubject.layoutManager = GridLayoutManager(
context, private fun initView(){
3, inputMethodMode = INPUT_METHOD_NEEDED
LinearLayoutManager.VERTICAL, // 重置
false view.btn_reset.setOnClickListener {
) if (chooseChildIndexList.size>0){
rvSubject.addItemDecoration(SpaceItemDecorator2(RxImageTool.dp2px(5f), 3)) chooseChildIndexList.forEach {
inputMethodMode = PopupWindow.INPUT_METHOD_NEEDED childList[it].isSelected = false
}
childEducationAdapter.notifyDataSetChanged()
}
if (chooseStressIndexList.size>0){
chooseStressIndexList.forEach{
stressList[it].isSelected = false
}
stressAdapter.notifyDataSetChanged()
}
if (chooseLoveEmotionIndexList.size>0){
chooseLoveEmotionIndexList.forEach {
loveEmotionList[it].isSelected = false
}
loveEmotionAdapter.notifyDataSetChanged()
}
if (chooseMarriedFamilyIndexList.size>0){
chooseMarriedFamilyIndexList.forEach {
marriedFamilyList[it].isSelected = false
}
marriedFamilyAdapter.notifyDataSetChanged()
}
if (choosePersonalGrowthIndexList.size>0){
choosePersonalGrowthIndexList.forEach{
personalGrowthList[it].isSelected = false
}
personalGrowthAdapter.notifyDataSetChanged()
}
if (chooseInterpersonalRelationshipIndexList.size>0){
chooseInterpersonalRelationshipIndexList.forEach {
interpersonalRelationshipList[it].isSelected = false
}
interpersonalRelationshipAdapter.notifyDataSetChanged()
}
if (chooseCareerDevelopmentIndexList.size>0){
chooseCareerDevelopmentIndexList.forEach {
careerDevelopmentList[it].isSelected = false
}
careerDevelopmentAdapter.notifyDataSetChanged()
}
if (chooseMentalHealthIndexList.size>0){
chooseMentalHealthIndexList.forEach {
mentalHealthList[it].isSelected = false
}
mentalHealthAdapter.notifyDataSetChanged()
}
mAllFilter.categoryId2List.clear()
mAllFilter.categoryId3List.clear()
}
// 确定
view.btnConfirm.setOnClickListener { view.btnConfirm.setOnClickListener {
onSubjectsSelectedListener?.onCategoriesSelected(selectedCategories) onSubjectsSelectedListener?.onCategoriesSelected()
dismiss() dismiss()
} }
// 亲子教育
val rvSortChildEducation = view.rv_sort_child_education
ivSortChildEducationOpen = view.iv_sort_child_education_open
childEducationAdapter = SortAdapter(childList)
rvSortChildEducation.layoutManager = FlowLayoutManager()
rvSortChildEducation.adapter = childEducationAdapter
childEducationAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (childList[0].isSelected){
childList[0].isSelected = false
mAllFilter.categoryId2List.remove(childList[0].cate_id)
chooseChildIndexList.remove(position)
}else{
childList.forEachIndexed { index, _ ->
childList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(childList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(childList[index].cate_id)
}
}
chooseChildIndexList.add(position)
}
}else{
if (!childList[position].isSelected&&childList[0].isSelected){
childList[0].isSelected = false
mAllFilter.categoryId2List.remove(childList[0].cate_id)
}
childList[position].isSelected = !childList[position].isSelected
if (childList[position].isSelected){
mAllFilter.categoryId3List.add(childList[position].cate_id)
chooseChildIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(childList[position].cate_id)
chooseChildIndexList.remove(position)
}
}
childEducationAdapter.notifyDataSetChanged()
}
// 情绪压力
val rvSortEmotionalStress = view.rv_sort_emotional_stress
ivSortEmotionalStress = view.iv_sort_emotional_stress
stressAdapter = SortAdapter(stressList)
rvSortEmotionalStress.layoutManager = FlowLayoutManager()
rvSortEmotionalStress.adapter = stressAdapter
stressAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (stressList[0].isSelected){
stressList[0].isSelected = false
mAllFilter.categoryId2List.remove(stressList[0].cate_id)
chooseStressIndexList.remove(position)
}else{
stressList.forEachIndexed { index, _ ->
stressList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(stressList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(stressList[index].cate_id)
}
}
chooseStressIndexList.add(position)
}
}else{
if (!stressList[position].isSelected&&stressList[0].isSelected){
stressList[0].isSelected = false
mAllFilter.categoryId2List.remove(stressList[0].cate_id)
}
stressList[position].isSelected = !stressList[position].isSelected
if (stressList[position].isSelected){
mAllFilter.categoryId3List.add(stressList[position].cate_id)
chooseStressIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(stressList[position].cate_id)
chooseStressIndexList.remove(position)
}
}
stressAdapter.notifyDataSetChanged()
}
// 恋爱情感
val rvLoveEmotion = view.rv_sort_love_emotion
ivSortLoveEmotion = view.iv_sort_love_emotion
loveEmotionAdapter = SortAdapter(loveEmotionList)
rvLoveEmotion.layoutManager = FlowLayoutManager()
rvLoveEmotion.adapter = loveEmotionAdapter
loveEmotionAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (loveEmotionList[0].isSelected){
loveEmotionList[0].isSelected = false
mAllFilter.categoryId2List.remove(loveEmotionList[0].cate_id)
chooseLoveEmotionIndexList.remove(position)
}else{
loveEmotionList.forEachIndexed { index, _ ->
loveEmotionList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(loveEmotionList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(loveEmotionList[index].cate_id)
}
}
chooseLoveEmotionIndexList.add(position)
}
}else{
if (!loveEmotionList[position].isSelected&&loveEmotionList[0].isSelected){
loveEmotionList[0].isSelected = false
mAllFilter.categoryId2List.remove(loveEmotionList[0].cate_id)
}
loveEmotionList[position].isSelected = !loveEmotionList[position].isSelected
if (loveEmotionList[position].isSelected){
mAllFilter.categoryId3List.add(loveEmotionList[position].cate_id)
chooseLoveEmotionIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(loveEmotionList[position].cate_id)
chooseLoveEmotionIndexList.remove(position)
}
}
loveEmotionAdapter.notifyDataSetChanged()
}
// 婚姻家庭
ivSortMarriedFamily = view.iv_sort_married_family
val rvSortMarriedFamily = view.rv_sort_married_family
marriedFamilyAdapter = SortAdapter(marriedFamilyList)
rvSortMarriedFamily.layoutManager = FlowLayoutManager()
rvSortMarriedFamily.adapter = marriedFamilyAdapter
marriedFamilyAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (marriedFamilyList[0].isSelected){
marriedFamilyList[0].isSelected = false
mAllFilter.categoryId2List.remove(marriedFamilyList[0].cate_id)
chooseMarriedFamilyIndexList.remove(position)
}else{
marriedFamilyList.forEachIndexed { index, _ ->
marriedFamilyList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(marriedFamilyList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(marriedFamilyList[index].cate_id)
}
}
chooseMarriedFamilyIndexList.add(position)
}
}else{
if (!marriedFamilyList[position].isSelected&&marriedFamilyList[0].isSelected){
marriedFamilyList[0].isSelected = false
mAllFilter.categoryId2List.remove(marriedFamilyList[0].cate_id)
}
marriedFamilyList[position].isSelected = !marriedFamilyList[position].isSelected
if (marriedFamilyList[position].isSelected){
mAllFilter.categoryId3List.add(marriedFamilyList[position].cate_id)
chooseMarriedFamilyIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(marriedFamilyList[position].cate_id)
chooseMarriedFamilyIndexList.remove(position)
}
}
marriedFamilyAdapter.notifyDataSetChanged()
}
// 个人成长
ivSortPersonalGrowth = view.iv_sort_personal_growth
val rvSortPersonalGrowth = view.rv_sort_personal_growth
personalGrowthAdapter = SortAdapter(personalGrowthList)
rvSortPersonalGrowth.layoutManager = FlowLayoutManager()
rvSortPersonalGrowth.adapter = personalGrowthAdapter
personalGrowthAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (personalGrowthList[0].isSelected){
personalGrowthList[0].isSelected = false
mAllFilter.categoryId2List.remove(personalGrowthList[0].cate_id)
choosePersonalGrowthIndexList.remove(position)
}else{
personalGrowthList.forEachIndexed { index, _ ->
personalGrowthList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(personalGrowthList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(personalGrowthList[index].cate_id)
}
}
choosePersonalGrowthIndexList.add(position)
}
}else{
if (!personalGrowthList[position].isSelected&&personalGrowthList[0].isSelected){
personalGrowthList[0].isSelected = false
mAllFilter.categoryId2List.remove(childList[0].cate_id)
}
personalGrowthList[position].isSelected = !personalGrowthList[position].isSelected
if (personalGrowthList[position].isSelected){
mAllFilter.categoryId3List.add(personalGrowthList[position].cate_id)
choosePersonalGrowthIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(personalGrowthList[position].cate_id)
choosePersonalGrowthIndexList.remove(position)
}
}
personalGrowthAdapter.notifyDataSetChanged()
}
// 人际关系
ivSortInterpersonalRelationship = view.iv_sort_interpersonal_relationship
val rvSortInterpersonalRelationship = view.rv_sort_interpersonal_relationship
interpersonalRelationshipAdapter = SortAdapter(interpersonalRelationshipList)
rvSortInterpersonalRelationship.layoutManager = FlowLayoutManager()
rvSortInterpersonalRelationship.adapter = interpersonalRelationshipAdapter
interpersonalRelationshipAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (interpersonalRelationshipList[0].isSelected){
interpersonalRelationshipList[0].isSelected = false
mAllFilter.categoryId2List.remove(interpersonalRelationshipList[0].cate_id)
chooseInterpersonalRelationshipIndexList.remove(position)
}else{
interpersonalRelationshipList.forEachIndexed { index, _ ->
interpersonalRelationshipList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(interpersonalRelationshipList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(interpersonalRelationshipList[index].cate_id)
}
}
chooseInterpersonalRelationshipIndexList.add(position)
}
}else{
if (!interpersonalRelationshipList[position].isSelected&&interpersonalRelationshipList[0].isSelected){
interpersonalRelationshipList[0].isSelected = false
mAllFilter.categoryId2List.remove(interpersonalRelationshipList[0].cate_id)
}
interpersonalRelationshipList[position].isSelected = !interpersonalRelationshipList[position].isSelected
if (interpersonalRelationshipList[position].isSelected){
mAllFilter.categoryId3List.add(interpersonalRelationshipList[position].cate_id)
chooseInterpersonalRelationshipIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(interpersonalRelationshipList[position].cate_id)
chooseInterpersonalRelationshipIndexList.remove(position)
}
}
interpersonalRelationshipAdapter.notifyDataSetChanged()
}
// 职场发展
ivSortCareerDevelopment = view.iv_sort_career_development
val rvSortCareerDevelopment = view.rv_sort_career_development
careerDevelopmentAdapter = SortAdapter(careerDevelopmentList)
rvSortCareerDevelopment.layoutManager = FlowLayoutManager()
rvSortCareerDevelopment.adapter = careerDevelopmentAdapter
careerDevelopmentAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (careerDevelopmentList[0].isSelected){
careerDevelopmentList[0].isSelected = false
mAllFilter.categoryId2List.remove(childList[0].cate_id)
chooseCareerDevelopmentIndexList.remove(position)
}else{
careerDevelopmentList.forEachIndexed { index, _ ->
careerDevelopmentList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(careerDevelopmentList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(careerDevelopmentList[index].cate_id)
}
}
chooseCareerDevelopmentIndexList.add(position)
}
}else{
if (!careerDevelopmentList[position].isSelected&&careerDevelopmentList[0].isSelected){
careerDevelopmentList[0].isSelected = false
}
careerDevelopmentList[position].isSelected = !careerDevelopmentList[position].isSelected
if (careerDevelopmentList[position].isSelected){
mAllFilter.categoryId3List.add(careerDevelopmentList[position].cate_id)
chooseCareerDevelopmentIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(careerDevelopmentList[position].cate_id)
chooseCareerDevelopmentIndexList.remove(position)
}
}
careerDevelopmentAdapter.notifyDataSetChanged()
}
// 心理健康
ivSortMentalHealth = view.iv_sort_mental_health
val rvSortMentalHealth = view.rv_sort_mental_health
mentalHealthAdapter = SortAdapter(mentalHealthList)
rvSortMentalHealth.layoutManager = FlowLayoutManager()
rvSortMentalHealth.adapter = mentalHealthAdapter
mentalHealthAdapter.setOnItemClickListener { adapter, view, position ->
if (position==0){
if (mentalHealthList[0].isSelected){
mentalHealthList[0].isSelected = false
mAllFilter.categoryId2List.remove(mentalHealthList[0].cate_id)
chooseMentalHealthIndexList.remove(position)
}else{
mentalHealthList.forEachIndexed { index, _ ->
mentalHealthList[index].isSelected = index==0
if (index==0){
mAllFilter.categoryId2List.add(mentalHealthList[0].cate_id)
}else{
mAllFilter.categoryId3List.remove(mentalHealthList[index].cate_id)
}
}
chooseMentalHealthIndexList.add(position)
}
}else{
if (!mentalHealthList[position].isSelected&&mentalHealthList[0].isSelected){
mentalHealthList[0].isSelected = false
}
mentalHealthList[position].isSelected = !mentalHealthList[position].isSelected
if (mentalHealthList[position].isSelected){
mAllFilter.categoryId3List.add(mentalHealthList[position].cate_id)
chooseMentalHealthIndexList.add(position)
}else{
mAllFilter.categoryId3List.remove(mentalHealthList[position].cate_id)
chooseMentalHealthIndexList.remove(position)
}
}
mentalHealthAdapter.notifyDataSetChanged()
}
/**
* 原来的筛选项写在PopupWindow里边,数据太多的情况下,弹窗第一次打开很慢,所以这里做了一个骚操作,
* 先加载亲子教育和情绪压力的12条数据,之后再加载全部,后期时间充裕可以优化,直接做到页面里边,不要写在PopupWindow里边
*/
// 亲子教育
if (mAllFilter.childList.size>12){
childList.addAll(mAllFilter.childList.subList(0,12))
}else{
childList.addAll(mAllFilter.childList)
}
childEducationAdapter.notifyDataSetChanged()
if (mAllFilter.childList.size>12){
ivSortChildEducationOpen.visibility = View.VISIBLE
view.ll_sort_child_education_open.setOnClickListener {
if (!childEducationAdapter.isVisible){
if (childList.size<=12){
childList.addAll(mAllFilter.childList.subList(12,mAllFilter.childList.size))
childEducationAdapter.notifyDataSetChanged()
}
childEducationAdapter.setAllVisible()
ivSortChildEducationOpen.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
childEducationAdapter.setGone()
ivSortChildEducationOpen.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 情绪压力
if (mAllFilter.stressList.size>12){
stressList.addAll(mAllFilter.stressList.subList(0,12))
}else{
stressList.addAll(mAllFilter.stressList)
}
stressAdapter.notifyDataSetChanged()
if (mAllFilter.stressList.size>12){
ivSortEmotionalStress.visibility = View.VISIBLE
view.ll_sort_emotional_stress.setOnClickListener {
if (!stressAdapter.isVisible){
if (stressList.size<=12){
stressList.addAll(mAllFilter.stressList.subList(12,mAllFilter.stressList.size))
stressAdapter.notifyDataSetChanged()
}
stressAdapter.setAllVisible()
ivSortEmotionalStress.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
stressAdapter.setGone()
ivSortEmotionalStress.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
}
fun updateData(){
// 恋爱情感
loveEmotionList.addAll(mAllFilter.loveEmotionList)
loveEmotionAdapter.notifyDataSetChanged()
if (loveEmotionList.size>12){
ivSortLoveEmotion.visibility = View.VISIBLE
view.ll_sort_love_emotion.setOnClickListener {
if (!loveEmotionAdapter.isVisible){
loveEmotionAdapter.setAllVisible()
ivSortLoveEmotion.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
loveEmotionAdapter.setGone()
ivSortLoveEmotion.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 婚姻家庭
marriedFamilyList.addAll(mAllFilter.marriedFamilyList)
marriedFamilyAdapter.notifyDataSetChanged()
if (marriedFamilyList.size>12){
ivSortMarriedFamily.visibility = View.VISIBLE
view.ll_sort_married_family.setOnClickListener {
if (!marriedFamilyAdapter.isVisible){
marriedFamilyAdapter.setAllVisible()
ivSortMarriedFamily.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
marriedFamilyAdapter.setGone()
ivSortMarriedFamily.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 个人成长
personalGrowthList.addAll(mAllFilter.personalGrowthList)
personalGrowthAdapter.notifyDataSetChanged()
if (personalGrowthList.size>12){
ivSortPersonalGrowth.visibility = View.VISIBLE
view.ll_sort_personal_growth.setOnClickListener {
if (!personalGrowthAdapter.isVisible){
personalGrowthAdapter.setAllVisible()
ivSortPersonalGrowth.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
personalGrowthAdapter.setGone()
ivSortPersonalGrowth.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 人际关系
interpersonalRelationshipList.addAll(mAllFilter.interpersonalRelationshipList)
interpersonalRelationshipAdapter.notifyDataSetChanged()
if (interpersonalRelationshipList.size>12){
ivSortInterpersonalRelationship.visibility = View.VISIBLE
view.ll_sort_interpersonal_relationship.setOnClickListener {
if (!interpersonalRelationshipAdapter.isVisible){
interpersonalRelationshipAdapter.setAllVisible()
ivSortInterpersonalRelationship.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
interpersonalRelationshipAdapter.setGone()
ivSortInterpersonalRelationship.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 职场发展
careerDevelopmentList.addAll(mAllFilter.careerDevelopmentList)
careerDevelopmentAdapter.notifyDataSetChanged()
if (careerDevelopmentList.size>12){
ivSortCareerDevelopment.visibility = View.VISIBLE
view.ll_sort_career_development.setOnClickListener {
if (!careerDevelopmentAdapter.isVisible){
careerDevelopmentAdapter.setAllVisible()
ivSortCareerDevelopment.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
careerDevelopmentAdapter.setGone()
ivSortCareerDevelopment.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
// 心理健康
mentalHealthList.addAll(mAllFilter.mentalHealthList)
mentalHealthAdapter.notifyDataSetChanged()
if (mentalHealthList.size>12){
ivSortMentalHealth.visibility = View.VISIBLE
view.ll_sort_mental_health.setOnClickListener {
if (!mentalHealthAdapter.isVisible){
mentalHealthAdapter.setAllVisible()
ivSortMentalHealth.setImageResource(R.drawable.consultant_ic_sort_open)
}else{
mentalHealthAdapter.setGone()
ivSortMentalHealth.setImageResource(R.drawable.consultant_ic_sort_close)
}
}
}
} }
} }
\ No newline at end of file
...@@ -34,17 +34,14 @@ import io.reactivex.schedulers.Schedulers ...@@ -34,17 +34,14 @@ import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.consultant_item_filter.view.* import kotlinx.android.synthetic.main.consultant_item_filter.view.*
import kotlinx.android.synthetic.main.consultant_item_price_range.view.* import kotlinx.android.synthetic.main.consultant_item_price_range.view.*
import kotlinx.android.synthetic.main.consultant_ui_filter_popup.view.* import kotlinx.android.synthetic.main.consultant_ui_filter_popup.view.*
import kotlin.math.roundToInt
/** /**
* 筛选弹窗 * 筛选弹窗
* Created by zqk on 17-9-15. * Created by zqk on 17-9-15.
*/ */
class FilterPopupWindow( class FilterPopupWindow(private val context: Context, private val filterData: Filters, private val tempFilter: AllFilter) : PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) {
private val context: Context,
private val filterData: Filters,
private val tempFilter: AllFilter
) : PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) {
private val mDisposableList = CompositeDisposable() private val mDisposableList = CompositeDisposable()
...@@ -121,7 +118,7 @@ class FilterPopupWindow( ...@@ -121,7 +118,7 @@ class FilterPopupWindow(
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
private fun initKeyboardListener(view: View) { private fun initKeyboardListener(view: View) {
var svFilter = view.findViewById<ScrollView>(R.id.sv_filter) val svFilter = view.findViewById<ScrollView>(R.id.sv_filter)
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
svFilter.setOnTouchListener { _, _ -> svFilter.setOnTouchListener { _, _ ->
...@@ -282,7 +279,7 @@ class FilterPopupWindow( ...@@ -282,7 +279,7 @@ class FilterPopupWindow(
account += tempFilter.priceRanges?.maxPrice?.toDouble()!! account += tempFilter.priceRanges?.maxPrice?.toDouble()!!
} }
biEventParams = (Math.round(account / 2)).toString() biEventParams = ((account / 2).roundToInt()).toString()
} }
} }
...@@ -294,7 +291,7 @@ class FilterPopupWindow( ...@@ -294,7 +291,7 @@ class FilterPopupWindow(
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.compose(RxUtils.resultJavaData()) .compose(RxUtils.resultJavaData())
.map { it } .map { it }
.filter { it != null } .filter { true }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ .subscribe({
......
...@@ -16,7 +16,7 @@ import kotlinx.android.synthetic.main.consultant_ui_sort_popup_window.view.* ...@@ -16,7 +16,7 @@ import kotlinx.android.synthetic.main.consultant_ui_sort_popup_window.view.*
* 排序弹窗 * 排序弹窗
* Created by zqk on 17-9-15. * Created by zqk on 17-9-15.
*/ */
class SortPopupWindow(val context: Context, private val sortItems: ArrayList<ReorderItem>, var selectedSort: ReorderItem, private val onSortItemSelectedListener: OnSortItemSelectedListener) class SortPopupWindow(val context: Context, sortItems: ArrayList<ReorderItem>, var selectedSort: ReorderItem, onSortItemSelectedListener: OnSortItemSelectedListener)
: PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) { : PopupWindow(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) {
private var adapter: SortRecyclerViewAdapter private var adapter: SortRecyclerViewAdapter
...@@ -31,12 +31,7 @@ class SortPopupWindow(val context: Context, private val sortItems: ArrayList<Reo ...@@ -31,12 +31,7 @@ class SortPopupWindow(val context: Context, private val sortItems: ArrayList<Reo
val rvSortItem = view.rvSortItem val rvSortItem = view.rvSortItem
adapter = SortRecyclerViewAdapter(context, sortItems, selectedSort, onSortItemSelectedListener) adapter = SortRecyclerViewAdapter(context, sortItems, selectedSort, onSortItemSelectedListener)
rvSortItem.adapter = adapter rvSortItem.adapter = adapter
rvSortItem.layoutManager = rvSortItem.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
LinearLayoutManager(
context,
LinearLayoutManager.VERTICAL,
false
)
// rvSortItem.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL)) // rvSortItem.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL))
} }
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
android:paddingTop="12dp"
android:orientation="vertical"
android:id="@+id/ll_sort_item"
>
<TextView
android:id="@+id/tv_sort_name"
android:layout_width="75dp"
android:layout_height="34dp"
android:gravity="center"
android:textColor="@color/consultant_color_search_filter_selector"
android:orientation="vertical"
android:background="@drawable/consultant_bg_search_filter_selector"
android:textSize="14sp"
tools:text="恋爱婚姻" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="10dp"
android:paddingTop="12dp"
android:orientation="vertical"
android:id="@+id/ll_sort_item"
>
<TextView
android:id="@+id/tv_sort_name"
android:layout_width="wrap_content"
android:layout_height="34dp"
android:gravity="center"
android:textColor="@color/consultant_color_search_filter_selector"
android:orientation="vertical"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:background="@drawable/consultant_bg_search_filter_selector"
android:textSize="14sp"
tools:text="恋爱婚姻" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" <TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tvSubjectName" android:id="@+id/tv_sort_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="36dp" android:layout_height="36dp"
android:gravity="center" android:gravity="center"
android:textColor="@color/consultant_color_search_filter_selector" android:textColor="@color/consultant_color_search_filter_selector"
android:orientation="vertical" android:orientation="vertical"
android:background="@drawable/consultant_bg_search_filter_selector" android:background="@drawable/consultant_bg_search_filter_selector"
android:textSize="14dp" android:textSize="14dp"
tools:text="恋爱婚姻" /> tools:text="恋爱婚姻" />
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="566dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/platform_white" android:background="@color/platform_white"
android:orientation="vertical"> android:orientation="vertical">
<TextView <androidx.core.widget.NestedScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="服务类型"
android:textSize="@dimen/platform_dp_16"
android:textColor="@color/platform_color_242424"
android:textStyle="bold"
android:layout_marginTop="@dimen/platform_dp_24"
android:layout_marginStart="@dimen/platform_dp_15"
android:layout_marginBottom="7dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSubject"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" app:layout_constraintTop_toTopOf="parent"
android:layout_marginRight="10dp" >
android:overScrollMode="never"/> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="68dp"
>
<LinearLayout
android:id="@+id/ll_sort_child_education_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_17"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="亲子教育"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_child_education_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_child_education"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_emotional_stress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="情绪压力"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_emotional_stress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_emotional_stress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_love_emotion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="恋爱情感"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_love_emotion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_love_emotion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_married_family"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="婚姻家庭"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_married_family"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_married_family"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_personal_growth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="个人成长"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_personal_growth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_personal_growth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_interpersonal_relationship"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="人际关系"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_interpersonal_relationship"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_interpersonal_relationship"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_career_development"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="职场发展"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_career_development"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_career_development"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
<LinearLayout
android:id="@+id/ll_sort_mental_health"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="@dimen/platform_dp_16"
android:paddingEnd="@dimen/platform_dp_16"
android:layout_marginTop="@dimen/platform_dp_21"
android:gravity="center_vertical"
>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="心理健康"
android:textSize="16sp"
android:textColor="@color/platform_color_242424"
android:includeFontPadding="false"
android:fontFamily="sans-serif-medium" />
<ImageView
android:id="@+id/iv_sort_mental_health"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/consultant_ic_sort_close"
android:visibility="gone"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_sort_mental_health"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:overScrollMode="never"
/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -31,6 +324,8 @@ ...@@ -31,6 +324,8 @@
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingTop="8dp" android:paddingTop="8dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
> >
<TextView <TextView
...@@ -50,12 +345,12 @@ ...@@ -50,12 +345,12 @@
android:layout_weight="1" android:layout_weight="1"
android:layout_height="44dp" android:layout_height="44dp"
android:layout_marginStart="13dp" android:layout_marginStart="13dp"
android:background="@drawable/consultant_solid_1da1f2_r_8" android:background="@drawable/consultant_solid_main_theme_color_r_8"
android:gravity="center" android:gravity="center"
android:text="@string/platform_confirm" android:text="@string/platform_confirm"
android:textSize="16sp" android:textSize="16sp"
android:textColor="@color/platform_but_text_color" /> android:textColor="@color/white" />
</LinearLayout> </LinearLayout>
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment