Commit 14393818 authored by yinjiacheng's avatar yinjiacheng

add 选择自提点下拉刷新和上拉加载更多逻辑

parent 72e4725b
...@@ -10,6 +10,7 @@ import com.yidian.bcommon.mvvm.BaseMvvmActivity ...@@ -10,6 +10,7 @@ import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.adapter.PickupPointListAdapter import com.yidian.shenghuoquan.border.adapter.PickupPointListAdapter
import com.yidian.shenghuoquan.border.databinding.BorderActivitySelectPickupPointBinding import com.yidian.shenghuoquan.border.databinding.BorderActivitySelectPickupPointBinding
import com.yidian.shenghuoquan.border.dto.PickupPointListDto
import com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel import com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel
import com.yidian.xarc.xevent.XBaseEvent import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager import com.yidian.xarc.xevent.XEventManager
...@@ -34,6 +35,11 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi ...@@ -34,6 +35,11 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
} }
} }
/**
* 搜索关键字
*/
private var keyWords: String? = null
override fun getXPageName(): String { override fun getXPageName(): String {
return XRouterPathConstants.PICKUP_POINT_ACTIVITY return XRouterPathConstants.PICKUP_POINT_ACTIVITY
} }
...@@ -41,6 +47,8 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi ...@@ -41,6 +47,8 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
XEventManager.register(this) XEventManager.register(this)
// 标记是否有当前位置
binding.location = params?.get(IntentConstants.KEY_EXTRA_LONGITUDE) != null && params?.get(IntentConstants.KEY_EXTRA_LATITUDE) != null
} }
override fun onDestroy() { override fun onDestroy() {
...@@ -50,8 +58,9 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi ...@@ -50,8 +58,9 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
override fun initView() { override fun initView() {
initRecyclerView() initRecyclerView()
initSmartRefresh()
registerUIEvent() registerUIEvent()
requestPickupPoint(null) requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
} }
private fun initRecyclerView() { private fun initRecyclerView() {
...@@ -60,26 +69,50 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi ...@@ -60,26 +69,50 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
binding.rvPickupPointList.addItemDecoration(PickupPointListAdapter.PickupPointListItemDecoration()) binding.rvPickupPointList.addItemDecoration(PickupPointListAdapter.PickupPointListItemDecoration())
} }
private fun initSmartRefresh() {
binding.rlPickupPointList.setOnRefreshListener {
requestPickupPoint(SelectPickupPointViewModel.LoadType.REFRESH)
}
binding.rlPickupPointList.setOnLoadMoreListener {
requestPickupPoint(SelectPickupPointViewModel.LoadType.LOAD_MORE)
}
}
/** /**
* 注册UI事件监听 * 注册UI事件监听
*/ */
private fun registerUIEvent() { private fun registerUIEvent() {
vm.pickupPointListData.observe(this, { vm.pickupPointListSearch.observe(this, {
updateData(it)
})
vm.pickupPointListRefresh.observe(this, {
binding.rlPickupPointList.finishRefresh(it != null)
updateData(it)
})
vm.pickupPointListLoadMore.observe(this, {
binding.rlPickupPointList.finishLoadMore(it != null)
updateData(it)
})
}
/**
* 更新列表数据
*/
private fun updateData(data: PickupPointListDto?) {
// 标记当前选中的自提点 // 标记当前选中的自提点
adapter.setSelectedId(params?.get(IntentConstants.KEY_EXTRA_PICKUP_POINT_ID)?.let { id -> id as Long }) adapter.setSelectedId(params?.get(IntentConstants.KEY_EXTRA_PICKUP_POINT_ID)?.let { id -> id as Long })
adapter.updateData(it.list) adapter.updateData(data?.list)
})
} }
/** /**
* 请求附近自提点 * 请求自提点列表
*/ */
private fun requestPickupPoint(keyWords: String?) { private fun requestPickupPoint(type: SelectPickupPointViewModel.LoadType) {
vm.requestPickupPointList( vm.requestPickupPointList(
params?.get(IntentConstants.KEY_EXTRA_MARKETING_ID) as String, params?.get(IntentConstants.KEY_EXTRA_MARKETING_ID) as String,
params?.get(IntentConstants.KEY_EXTRA_LONGITUDE)?.let { it as Double }, params?.get(IntentConstants.KEY_EXTRA_LONGITUDE)?.let { it as Double },
params?.get(IntentConstants.KEY_EXTRA_LATITUDE)?.let { it as Double }, params?.get(IntentConstants.KEY_EXTRA_LATITUDE)?.let { it as Double },
keyWords keyWords, type
) )
} }
...@@ -87,12 +120,14 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi ...@@ -87,12 +120,14 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
fun onEvent(event: XBaseEvent?) { fun onEvent(event: XBaseEvent?) {
when (event?.name) { when (event?.name) {
XEventConfig.SEARCH_PICKUP_POINT_CANCEL -> { XEventConfig.SEARCH_PICKUP_POINT_CANCEL -> {
keyWords = null
// 取消搜索自提点 请求附近自提点 // 取消搜索自提点 请求附近自提点
requestPickupPoint(null) requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
} }
XEventConfig.SEARCH_PICKUP_POINT_START -> { XEventConfig.SEARCH_PICKUP_POINT_START -> {
keyWords = event.body as String
// 开始搜索自提点 // 开始搜索自提点
requestPickupPoint(event.body as String) requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
} }
} }
} }
......
...@@ -14,32 +14,78 @@ import com.yidian.shenghuoquan.border.http.callback.IGetPickupPointListCallback ...@@ -14,32 +14,78 @@ import com.yidian.shenghuoquan.border.http.callback.IGetPickupPointListCallback
*/ */
class SelectPickupPointViewModel : BaseViewModel() { class SelectPickupPointViewModel : BaseViewModel() {
private val _pickupPointListData = MutableLiveData<PickupPointListDto>() private val _pickupPointListSearch = MutableLiveData<PickupPointListDto?>()
val pickupPointListData: LiveData<PickupPointListDto> = _pickupPointListData val pickupPointListSearch: LiveData<PickupPointListDto?> = _pickupPointListSearch
private val _pickupPointListRefresh = MutableLiveData<PickupPointListDto?>()
val pickupPointListRefresh: LiveData<PickupPointListDto?> = _pickupPointListRefresh
private val _pickupPointListLoadMore = MutableLiveData<PickupPointListDto?>()
val pickupPointListLoadMore: LiveData<PickupPointListDto?> = _pickupPointListLoadMore
/**
* 记录分页请求下一页
*/
private var nextPage = 2
/** /**
* 请求自提点列表 * 请求自提点列表
*/ */
fun requestPickupPointList(marketingId: String, longitude: Double?, latitude: Double?, keyWords: String?) { fun requestPickupPointList(
marketingId: String,
longitude: Double?,
latitude: Double?,
keyWords: String?,
type: LoadType,
page: Int = 1,
limit: Int = 20,
) {
val requestParams = HashMap<String, String?>(6) val requestParams = HashMap<String, String?>(6)
requestParams["marketing_id"] = marketingId requestParams["marketing_id"] = marketingId
longitude?.let { requestParams["longitude"] = it.toString() } longitude?.let { requestParams["longitude"] = it.toString() }
latitude?.let { requestParams["latitude"] = it.toString() } latitude?.let { requestParams["latitude"] = it.toString() }
if (keyWords?.isNotEmpty() == true) requestParams["keywords"] = keyWords if (keyWords?.isNotEmpty() == true) requestParams["keywords"] = keyWords
requestParams["page"] = "1" if (type == LoadType.SEARCH || type == LoadType.REFRESH) {
requestParams["limit"] = "20" requestParams["page"] = page.toString()
} else {
requestParams["page"] = nextPage.toString()
}
requestParams["limit"] = limit.toString()
OrderRemoteDataSource.getPickupPointList( OrderRemoteDataSource.getPickupPointList(
object : IGetPickupPointListCallback { object : IGetPickupPointListCallback {
override fun getPickupPointListSuccess(result: PickupPointListDto?) { override fun getPickupPointListSuccess(result: PickupPointListDto?) {
result?.let { _pickupPointListData.value = it } if (type == LoadType.SEARCH || type == LoadType.REFRESH) nextPage = 2 else nextPage++
when (type) {
LoadType.SEARCH -> _pickupPointListSearch.value = result
LoadType.REFRESH -> _pickupPointListRefresh.value = result
LoadType.LOAD_MORE -> _pickupPointListLoadMore.value = result
}
} }
override fun getPickupPointListFailure(message: String?) { override fun getPickupPointListFailure(message: String?) {
when (type) {
LoadType.SEARCH -> _pickupPointListSearch.value = null
LoadType.REFRESH -> _pickupPointListRefresh.value = null
LoadType.LOAD_MORE -> _pickupPointListLoadMore.value = null
}
} }
}, requestParams }, requestParams
) )
} }
/**
* 列表加载类型
*/
enum class LoadType {
// 搜索
SEARCH,
// 下拉刷新
REFRESH,
// 上拉加载更多
LOAD_MORE
}
} }
...@@ -4,10 +4,16 @@ ...@@ -4,10 +4,16 @@
<data> <data>
<import type="android.view.View" />
<variable <variable
name="vm" name="vm"
type="com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel" /> type="com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel" />
<variable
name="location"
type="Boolean" />
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
...@@ -43,11 +49,12 @@ ...@@ -43,11 +49,12 @@
android:text="@string/nearby_pickup_point" android:text="@string/nearby_pickup_point"
android:textColor="@color/color_333333" android:textColor="@color/color_333333"
android:textSize="@dimen/sp16" android:textSize="@dimen/sp16"
android:visibility="@{location ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sv_pickup_point_search" /> app:layout_constraintTop_toBottomOf="@id/sv_pickup_point_search" />
<androidx.recyclerview.widget.RecyclerView <com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/rv_pickup_point_list" android:id="@+id/rl_pickup_point_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginStart="@dimen/dp16" android:layout_marginStart="@dimen/dp16"
...@@ -55,10 +62,17 @@ ...@@ -55,10 +62,17 @@
android:layout_marginEnd="@dimen/dp16" android:layout_marginEnd="@dimen/dp16"
android:layout_marginBottom="@dimen/dp20" android:layout_marginBottom="@dimen/dp20"
android:background="@drawable/shape_solid_ffffff_corner_20" android:background="@drawable/shape_solid_ffffff_corner_20"
android:paddingStart="@dimen/dp16"
android:paddingEnd="@dimen/dp16"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_nearby_pickup_point" /> app:layout_constraintTop_toBottomOf="@id/tv_nearby_pickup_point">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pickup_point_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="@dimen/dp16"
android:paddingEnd="@dimen/dp16" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>
\ No newline at end of file
...@@ -39,14 +39,15 @@ ...@@ -39,14 +39,15 @@
android:background="@null" android:background="@null"
android:hint="@string/search_pickup_point" android:hint="@string/search_pickup_point"
android:imeOptions="actionSearch" android:imeOptions="actionSearch"
android:maxLines="1"
android:inputType="text" android:inputType="text"
android:maxLines="1"
android:textColor="@color/color_333333" android:textColor="@color/color_333333"
android:textColorHint="@color/color_666666" android:textColorHint="@color/color_666666"
android:textCursorDrawable="@drawable/shape_bg_input_cursor"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_search"
app:layout_constraintEnd_toStartOf="@id/iv_clear" app:layout_constraintEnd_toStartOf="@id/iv_clear"
app:layout_constraintStart_toEndOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView <ImageView
......
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