Commit 6fbbb053 authored by yinjiacheng's avatar yinjiacheng

fix SHQCLIENT-1618 选择自提点页 1.增加取消按钮 2.增加无数据缺省页

parent 75126e63
......@@ -26,10 +26,6 @@ class XEventConfig {
const val CONFIRM_ORDER_CHOOSE_POINT_SUCCESS = "confirm_order_choose_point_success"
// 确认订单选择优惠券成功
const val CONFIRM_ORDER_CHOOSE_COUPON_SUCCESS = "confirm_order_choose_coupon_success"
// 取消搜索自提点
const val SEARCH_PICKUP_POINT_CANCEL = "search_pickup_point_cancel"
// 开始搜索自提点
const val SEARCH_PICKUP_POINT_START = "search_pickup_point_start"
// C端登录成功
const val CLIENT_C_LOGIN_SUCCESS = "client_c_login_success"
// 通知h5刷新团餐拼团活动详情
......
package com.yidian.shenghuoquan.buserorder.ui
import android.os.Bundle
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.yidian.bcommon.constant.IntentConstants
import com.yidian.bcommon.constant.XEventConfig
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.bcommon.services.ZapServiceActionConstants
......@@ -13,13 +11,10 @@ import com.yidian.shenghuoquan.buserorder.R
import com.yidian.shenghuoquan.buserorder.adapter.PickupPointListAdapter
import com.yidian.shenghuoquan.buserorder.databinding.BorderActivitySelectPickupPointBinding
import com.yidian.shenghuoquan.buserorder.dto.PickupPointListDto
import com.yidian.shenghuoquan.buserorder.ui.widget.PickupPointSearchView
import com.yidian.shenghuoquan.buserorder.viewmodel.SelectPickupPointViewModel
import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager
import com.yidian.xpage.XPageViewProtocol
import com.yidian.yac.core.zap.ZapTicket
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import org.json.JSONObject
/**
......@@ -28,7 +23,7 @@ import org.json.JSONObject
* description: 选择自提点页
*/
class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPointBinding, SelectPickupPointViewModel>(),
XPageViewProtocol {
XPageViewProtocol, PickupPointSearchView.OnPickupPointSearchCallback {
override val layoutId = R.layout.border_activity_select_pickup_point
override val vm: SelectPickupPointViewModel by viewModels()
......@@ -43,23 +38,14 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
/**
* 搜索关键字
*/
private var keyWords: String? = null
private var keywords: String? = null
override fun getXPageName(): String {
return XRouterPathConstants.PICKUP_POINT_ACTIVITY
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
XEventManager.register(this)
}
override fun onDestroy() {
super.onDestroy()
XEventManager.unRegister(this)
}
override fun initView() {
binding.svPickupPointSearch.initPickupPointSearch(this)
initRecyclerView()
initSmartRefresh()
registerUIEvent()
......@@ -103,6 +89,8 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
// 是否有位置信息 控制距离显示
adapter.setLocation(location)
adapter.updateData(data.list)
// 是否有自提点数据
binding.data = data.list.isNotEmpty()
}
/**
......@@ -119,23 +107,19 @@ class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPoi
location = longitude != 0.0 && latitude != 0.0
// 是否有位置信息 控制附近自提点显示
binding.location = location
vm.requestPickupPointList(params?.get(IntentConstants.KEY_EXTRA_MARKETING_ID) as String, longitude, latitude, keyWords, type)
vm.requestPickupPointList(params?.get(IntentConstants.KEY_EXTRA_MARKETING_ID) as String, longitude, latitude, keywords, type)
}.ship()
}
@Subscribe(sticky = false, threadMode = ThreadMode.MAIN)
fun onEvent(event: XBaseEvent?) {
when (event?.name) {
XEventConfig.SEARCH_PICKUP_POINT_CANCEL -> {
keyWords = null
// 取消搜索自提点 请求附近自提点
requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
}
XEventConfig.SEARCH_PICKUP_POINT_START -> {
keyWords = event.body as String
override fun onStartSearch(keywords: String) {
this.keywords = keywords
// 开始搜索自提点
requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
}
}
override fun onCancelSearch() {
keywords = null
// 取消搜索自提点 请求附近自提点
requestPickupPoint(SelectPickupPointViewModel.LoadType.SEARCH)
}
}
......@@ -8,12 +8,9 @@ import android.view.inputmethod.InputMethodManager
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.LifecycleOwner
import com.yidian.bcommon.constant.XEventConfig
import com.yidian.shenghuoquan.buserorder.R
import com.yidian.shenghuoquan.buserorder.databinding.BorderViewPickupPointSearchBinding
import com.yidian.shenghuoquan.buserorder.viewmodel.PickupPointSearchViewModel
import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager
/**
* author: yinjiacheng
......@@ -30,21 +27,22 @@ class PickupPointSearchView @JvmOverloads constructor(context: Context, attrs: A
true
)
private val vm by lazy { PickupPointSearchViewModel() }
private var callback: OnPickupPointSearchCallback? = null
init {
fun initPickupPointSearch(callback: OnPickupPointSearchCallback?) {
binding.vm = vm
registerUIEvent()
this.callback = callback
initView()
registerUIEvent()
}
private fun initView() {
binding.etSearch.setOnEditorActionListener { v, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// 隐藏软键盘
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
// 通知开始搜索
XEventManager.post(XBaseEvent(XEventConfig.SEARCH_PICKUP_POINT_START, v.text.toString()))
hideKeyboard()
// 回调开始搜索
callback?.onStartSearch(v.text.toString())
}
true
}
......@@ -57,8 +55,37 @@ class PickupPointSearchView @JvmOverloads constructor(context: Context, attrs: A
vm.clearSearch.observe(context as LifecycleOwner, {
// 清空搜索框
binding.etSearch.setText("")
// 通知取消搜索
XEventManager.post(XBaseEvent(XEventConfig.SEARCH_PICKUP_POINT_CANCEL, null))
// 回调取消搜索
callback?.onCancelSearch()
})
vm.cancelSearch.observe(context as LifecycleOwner, {
// 清空搜索框
binding.etSearch.setText("")
// 收起软键盘
hideKeyboard()
// 回调取消搜索
callback?.onCancelSearch()
})
}
/**
* 收起软键盘
*/
private fun hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
interface OnPickupPointSearchCallback {
/**
* 开始搜索
* @param keywords 关键词
*/
fun onStartSearch(keywords: String)
/**
* 取消搜索
*/
fun onCancelSearch()
}
}
package com.yidian.shenghuoquan.buserorder.viewmodel
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.BindingAdapter
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.utils.DensityUtil
/**
* author: yinjiacheng
......@@ -11,14 +15,39 @@ import com.yidian.bcommon.mvvm.BaseViewModel
*/
class PickupPointSearchViewModel : BaseViewModel() {
companion object {
/**
* 设置右外边距
* @param margin 外边距 单位dp
*/
@JvmStatic
@BindingAdapter("layout_marginEnd")
fun setMarginEnd(view: View, margin: Int) {
val lp = view.layoutParams as ConstraintLayout.LayoutParams
lp.marginEnd = DensityUtil.dp2px(margin.toFloat())
view.layoutParams = lp
}
}
private val _clearSearch = MutableLiveData<Unit>()
val clearSearch: LiveData<Unit> = _clearSearch
private val _cancelSearch = MutableLiveData<Unit>()
val cancelSearch: LiveData<Unit> = _cancelSearch
/**
* 清空搜索
* 请求附近自提点数据
* 清空搜索框输入 不收起软键盘 请求附近自提点数据
*/
fun clearSearch() {
_clearSearch.value = Unit
}
/**
* 取消搜索
* 清空搜索框输入 收起软键盘 请求附近自提点数据
*/
fun cancelSearch() {
_cancelSearch.value = Unit
}
}
......@@ -14,6 +14,10 @@
name="location"
type="Boolean" />
<variable
name="data"
type="Boolean" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
......@@ -65,6 +69,10 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_nearby_pickup_point">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pickup_point_list"
android:layout_width="match_parent"
......@@ -73,6 +81,15 @@
android:paddingStart="@dimen/dp16"
android:paddingEnd="@dimen/dp16" />
<com.yidian.bcommon.widget.CommonEmptyPageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{data ? View.GONE : View.VISIBLE}"
app:CommonEmptyPageView_empty_content_text="暂无对应自提点"
app:CommonEmptyPageView_place_holder_img="@drawable/bcommon_icon_nothing_place_holder" />
</FrameLayout>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
......
......@@ -14,10 +14,17 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp40"
android:layout_height="@dimen/dp40">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/shape_solid_ffffff_corner_10"
android:paddingStart="@dimen/dp9"
android:paddingEnd="@dimen/dp8">
android:paddingEnd="@dimen/dp8"
app:layout_constraintEnd_toStartOf="@id/tv_cancel"
app:layout_constraintStart_toStartOf="parent"
app:layout_marginEnd="@{etSearch.text.length() > 0 ? 16 : 0}">
<ImageView
android:id="@+id/iv_search"
......@@ -61,4 +68,19 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{() -> vm.cancelSearch()}"
android:text="@string/cancel"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp14"
android:visibility="@{etSearch.text.length() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
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