From 8c709a3f5fdeb2881839afdbcdb37859914c37b0 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 22 Apr 2026 17:09:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(fragment):=20=E4=BF=AE=E5=A4=8D=20CollectFr?= =?UTF-8?q?agment=20=E9=A6=96=E6=AC=A1=E6=89=93=E5=BC=80=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dish/match/ui/SingleFragmentActivity.kt | 6 +++--- .../dish/match/ui/fragment/CollectFragment.kt | 15 ++++++++++++--- .../com/shuwei/dish/match/utils/CameraUtils.kt | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SingleFragmentActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SingleFragmentActivity.kt index fcf44f1..cc6190d 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SingleFragmentActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SingleFragmentActivity.kt @@ -92,9 +92,9 @@ class SingleFragmentActivity : BaseActivity() { * 根据页面类型返回对应标题文本 */ private fun getTitleForPage(pageType: PageType): String = when (pageType) { - PageType.FOOD_COLLECT -> "菜品采集" - PageType.COOK_MODE -> "设备配置" - PageType.SEASONING_CONFIG -> "调料配置" + PageType.FOOD_COLLECT -> "食材采样" + PageType.COOK_MODE -> "餐品模式" + PageType.SEASONING_CONFIG -> "调料区设置" } /** diff --git a/app/src/main/java/com/shuwei/dish/match/ui/fragment/CollectFragment.kt b/app/src/main/java/com/shuwei/dish/match/ui/fragment/CollectFragment.kt index d6d73b4..2e70f9a 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/fragment/CollectFragment.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/fragment/CollectFragment.kt @@ -11,6 +11,7 @@ import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import androidx.camera.view.PreviewView +import androidx.core.view.doOnLayout import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.GridLayoutManager import com.shuwei.dish.match.R @@ -36,7 +37,7 @@ class CollectFragment : BaseFragment(){ companion object { private const val TAG = "CollectFragment" - const val MAX_COUNT = 9 + const val MAX_COUNT = 18 } private var selectedFoodId: String? = "" @@ -194,7 +195,11 @@ class CollectFragment : BaseFragment(){ initCamera(binding.flCameraPreview) currentActivity.setLifecycleCallback(object : SingleFragmentActivity.LifecycleCallback { override fun onActivityResume() { - cameraUtils.bind() + // 首次进入时 previewView 尚未 attach,由 doOnLayout 负责首次 bind + // 从后台切回时 previewView 已 attach,直接 bind 恢复预览 + if (::previewView.isInitialized && previewView.isAttachedToWindow) { + cameraUtils.bind() + } } override fun onActivityPause() { @@ -355,7 +360,7 @@ class CollectFragment : BaseFragment(){ override fun onResume() { super.onResume() - if (isVisible.not()) return + // 不使用 isVisible 判断,首次打开时 View 尚未 attach 到 Window,isVisible 会返回 false 导致遮罩永不隐藏 binding.llCameraFlag.run { visibility = View.VISIBLE postDelayed({ @@ -408,6 +413,10 @@ class CollectFragment : BaseFragment(){ } } cameraUtils.setPreviewController(previewView) + // doOnLayout 确保 previewView 测量完成(有有效尺寸和 Surface)后再 bind,解决首次打开无预览问题 + previewView.doOnLayout { + cameraUtils.bind() + } } } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/dish/match/utils/CameraUtils.kt b/app/src/main/java/com/shuwei/dish/match/utils/CameraUtils.kt index f79ccbe..6fc05cd 100644 --- a/app/src/main/java/com/shuwei/dish/match/utils/CameraUtils.kt +++ b/app/src/main/java/com/shuwei/dish/match/utils/CameraUtils.kt @@ -64,7 +64,7 @@ class CameraUtils(private var activity: ComponentActivity) { ) cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA } - bind() + // bind() 由外部在 previewView attach 到窗口后调用,避免首次无预览 } // if (isCameraReady.not()) {