fix(ui): 修复空态视图贴顶及刷新动画无法关闭问题

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-30 11:40:05 +08:00
co-authored by Claude Sonnet 4.6
parent 858cc24046
commit 5e46c21469
2 changed files with 35 additions and 12 deletions
@@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.activity.addCallback
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
@@ -20,6 +21,7 @@ import com.shuwei.dish.match.dialog.CommonDialog
import com.shuwei.dish.match.entity.FoodRecord
import com.shuwei.dish.match.net.UiState
import com.shuwei.dish.match.utils.DateTimeUtil
import com.shuwei.dish.match.utils.ext.dp
import com.shuwei.dish.match.utils.ext.gone
import com.shuwei.dish.match.utils.ext.startActivity
import com.shuwei.dish.match.utils.ext.toast
@@ -78,6 +80,7 @@ class SamplingModeActivity : BaseActivity() {
list.clear()
list.addAll(tempList)
dishAdapter.notifyDataSetChanged()
finishRefresh()
binding.refreshLayout.run {
setEnableRefresh(false)
setEnableLoadMore(false)
@@ -231,18 +234,11 @@ class SamplingModeActivity : BaseActivity() {
return SwipeMenuItem(this).apply {
setImage(R.drawable.ic_trash_white)
setBackground(R.drawable.bg_swipe_delete)
width = dp2px(160)
width = 160.dp
height = ViewGroup.LayoutParams.MATCH_PARENT
}
}
/**
* dp 转 px
*/
private fun dp2px(dp: Int): Int {
return (dp * resources.displayMetrics.density + 0.5f).toInt()
}
@SuppressLint("ClickableViewAccessibility")
private fun addViewListener() {
binding.btnAddSampling.setOnClickListener {
@@ -252,10 +248,19 @@ class SamplingModeActivity : BaseActivity() {
}
binding.refreshLayout.setOnRefreshListener {
pageNo = 1
getSamplingList()
if (binding.dishRadioGroup.checkedRadioButtonId == R.id.rbSamplingFinished) {
getSamplingList()
} else {
finishRefresh()
refreshLocalData()
}
}
binding.refreshLayout.setOnLoadMoreListener {
getSamplingList()
if (binding.dishRadioGroup.checkedRadioButtonId == R.id.rbSamplingFinished) {
getSamplingList()
} else {
finishRefresh()
}
}
binding.rbSamplingCooking.setOnClickListener {
@@ -313,7 +318,17 @@ class SamplingModeActivity : BaseActivity() {
}
emptyViewBinding!!.tvContent.text = "暂无数据"
emptyViewBinding!!.tvSubContent.text = "今日暂无采样数据,点击下方按钮新增采样"
dishAdapter.stateView = emptyViewBinding!!.root
// 方案B:沿用 adapter stateView,使用 FrameLayout.LayoutParams + minimumHeight 避免空态贴顶
emptyViewBinding!!.root.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
binding.rvSamplingList.post {
emptyViewBinding!!.root.minimumHeight = binding.rvSamplingList.height
dishAdapter.stateView = emptyViewBinding!!.root
finishRefresh()
}
//dishAdapter.setStateViewLayout(requireContext(), R.layout-sw800dp.layout_empty_view)
binding.refreshLayout.run {
@@ -5,6 +5,7 @@ import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
@@ -247,7 +248,14 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
}
emptyViewBinding!!.tvContent.text = "暂无数据"
emptyViewBinding!!.tvSubContent.text = "获取菜品数据失败,请检查网络设置或稍后重试"
dishAdapter.stateView = emptyViewBinding!!.root
emptyViewBinding!!.root.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
binding.rvDishList.post {
emptyViewBinding!!.root.minimumHeight = binding.rvDishList.height
dishAdapter.stateView = emptyViewBinding!!.root
}
} catch (e: Exception) {
e.printStackTrace()
}