From 655279a8a14484ead5a892d787e674c592ff97fe Mon Sep 17 00:00:00 2001 From: maxinyu Date: Fri, 17 Jul 2026 15:35:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E7=A2=8E=E7=89=87=E5=92=8C?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=AE=B0=E5=BD=95LoadingDialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ckkj/defense_device/MyApplication.kt | 21 ++++++++++ .../defense_device/home/HomeMenuFragment.kt | 3 +- .../defense_device/home/MessageActivity.kt | 40 +++++++++++++------ .../defense_device/home/PersonalFragment.kt | 8 ++++ 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/ckkj/defense_device/MyApplication.kt b/app/src/main/java/com/ckkj/defense_device/MyApplication.kt index b137d7a..040898f 100644 --- a/app/src/main/java/com/ckkj/defense_device/MyApplication.kt +++ b/app/src/main/java/com/ckkj/defense_device/MyApplication.kt @@ -5,6 +5,27 @@ import android.content.Context import com.blankj.utilcode.util.Utils import com.ckkj.defense_device.utils.LanguageUtil +// _ooOoo_ +// o8888888o +// 88" . "88 +// (| -_- |) +// O\ = /O +// ____/`---'\____ +// . ' \\| |// `. +// / \\||| : |||// \ +// / _||||| -:- |||||- \ +// | | \\\ - /// | | +// | \_| ''\---/'' | | +// \ .-\__ `-` ___/-. / +// ___`. .' /--.--\ `. . __ +// ."" '< `.___\_<|>_/___.' >'"". +// | | : `- \`.;`\ _ /`;.`/ - ` : | | +// \ \ `-. \_ __\ /__ _/ .-` / / +// ======`-.____`-.___\_____/___.-`____.-'====== +// `=---=' +// +// 佛祖保佑 永无BUG + class MyApplication : Application() { override fun onCreate() { diff --git a/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt b/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt index f45183d..c8a94ae 100644 --- a/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt +++ b/app/src/main/java/com/ckkj/defense_device/home/HomeMenuFragment.kt @@ -21,6 +21,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.alibaba.sdk.android.emas.g import com.ckkj.defense_device.R import com.ckkj.defense_device.adapter.DeviceAdapter import com.ckkj.defense_device.adapter.FamilyAdapter @@ -465,7 +466,7 @@ class HomeMenuFragment : Fragment() { isLoading = true - loadingDialog = if (showLoading) LoadingDialog(requireActivity()).setMessage("加载中...").apply { show() } else null + loadingDialog = if (showLoading) LoadingDialog(requireActivity()).setMessage(getString(R.string.loading)).apply { show() } else null CoroutineScope(Dispatchers.IO).launch { try { diff --git a/app/src/main/java/com/ckkj/defense_device/home/MessageActivity.kt b/app/src/main/java/com/ckkj/defense_device/home/MessageActivity.kt index 166fcc8..f57d297 100644 --- a/app/src/main/java/com/ckkj/defense_device/home/MessageActivity.kt +++ b/app/src/main/java/com/ckkj/defense_device/home/MessageActivity.kt @@ -5,11 +5,13 @@ import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.ckkj.defense_device.R import com.ckkj.defense_device.adapter.MessageListAdapter import com.ckkj.defense_device.adapter.MessageListItem import com.ckkj.defense_device.databinding.MessageActivityBinding import com.ckkj.defense_device.utils.MessageStatusManager import com.ckkj.defense_device.utils.RetrofitNetwork +import com.ckkj.defense_device.view.LoadingDialog import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -19,13 +21,13 @@ import kotlinx.coroutines.withContext class MessageActivity : AppCompatActivity() { private lateinit var binding: MessageActivityBinding private val messageAdapter by lazy { MessageListAdapter() } + private lateinit var loadingDialog: LoadingDialog private var currentPage = 1 private val pageSize = 10 private var isLoading = false private var hasMoreData = true private val allMessages = mutableListOf() - private var lastLoadedCount = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -41,6 +43,7 @@ class MessageActivity : AppCompatActivity() { } private fun initView() { + loadingDialog = LoadingDialog(this).setMessage(getString(R.string.loading)) binding.ivBack.setOnClickListener { finish() } binding.rvMessageList.layoutManager = LinearLayoutManager(this) binding.rvMessageList.adapter = messageAdapter @@ -70,20 +73,21 @@ class MessageActivity : AppCompatActivity() { if (isLoading) return isLoading = true + + if (currentPage == 1) { + showLoading() + } + CoroutineScope(Dispatchers.IO).launch { try { val messageResponse = RetrofitNetwork.getNetworkService().getMessage( pageNum = currentPage, pageSize = pageSize ) - println("total: ${messageResponse.total}") - println("rows size: ${messageResponse.rows.size}") - println("当前页:$currentPage, 加载条数:${messageResponse.rows.size}") val newMessages = messageResponse.rows - val loadedCount = newMessages.size - if (loadedCount < pageSize) { + if (newMessages.size < pageSize) { hasMoreData = false } @@ -98,11 +102,11 @@ class MessageActivity : AppCompatActivity() { allMessages.clear() } allMessages.addAll(newMessages) - lastLoadedCount = loadedCount val items = convertToMessageListItems(allMessages) withContext(Dispatchers.Main) { + hideLoading() hideEmptyState() messageAdapter.submitList(items) @@ -116,12 +120,10 @@ class MessageActivity : AppCompatActivity() { withContext(Dispatchers.Main) { if (allMessages.isEmpty()) { - println("items is empty, showing empty state") showEmptyState() } } } catch (e: Exception) { - println("Exception: ${e.message}") e.printStackTrace() withContext(Dispatchers.Main) { if (allMessages.isEmpty()) { @@ -130,6 +132,11 @@ class MessageActivity : AppCompatActivity() { } } finally { isLoading = false + if (currentPage == 1) { + withContext(Dispatchers.Main) { + hideLoading() + } + } } } } @@ -141,6 +148,18 @@ class MessageActivity : AppCompatActivity() { loadMessageList() } + private fun showLoading() { + binding.rvMessageList.visibility = View.GONE + binding.emptyLayout.visibility = View.GONE + binding.layoutNoNetwork.visibility = View.GONE + loadingDialog.show() + } + + private fun hideLoading() { + binding.rvMessageList.visibility = View.VISIBLE + loadingDialog.dismiss() + } + private fun showEmptyState() { binding.rvMessageList.visibility = View.GONE binding.emptyLayout.visibility = View.VISIBLE @@ -171,9 +190,6 @@ class MessageActivity : AppCompatActivity() { val groupedMessages = messages.groupBy { extractDate(it.createTime ?: "") } groupedMessages.forEach { (date, messageList) -> val headerTitle = formatDate(date) - messageList.forEachIndexed { index, message -> - println(" 消息${index + 1}: id=${message.id}, categoryName=${message.categoryName}, createTime=${message.createTime}") - } items.add(MessageListItem.Header(headerTitle)) messageList.forEach { message -> items.add( diff --git a/app/src/main/java/com/ckkj/defense_device/home/PersonalFragment.kt b/app/src/main/java/com/ckkj/defense_device/home/PersonalFragment.kt index b2d8587..3439e51 100644 --- a/app/src/main/java/com/ckkj/defense_device/home/PersonalFragment.kt +++ b/app/src/main/java/com/ckkj/defense_device/home/PersonalFragment.kt @@ -25,6 +25,7 @@ import com.ckkj.defense_device.utils.ActivityManager import com.ckkj.defense_device.view.CustomDialogFragmentText import com.ckkj.defense_device.view.FamilySwitchDialog import com.ckkj.defense_device.view.LanguageDialog +import com.ckkj.defense_device.view.LoadingDialog import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -35,6 +36,7 @@ class PersonalFragment : Fragment() { // ViewBinding private var _binding: PersonalFragmentBinding? = null private val binding get() = _binding!! + private var loadingDialog: LoadingDialog? = null override fun onResume() { super.onResume() fetchUserInfo() @@ -234,6 +236,7 @@ class PersonalFragment : Fragment() { private fun fetchUserInfo() { + loadingDialog = LoadingDialog(requireContext()).setMessage(getString(R.string.loading)).apply { show() } CoroutineScope(Dispatchers.IO).launch { try { val response = RetrofitNetwork.getNetworkService().getUserInfo() @@ -244,6 +247,11 @@ class PersonalFragment : Fragment() { } } catch (e: Exception) { e.printStackTrace() + } finally { + withContext(Dispatchers.Main) { + loadingDialog?.dismiss() + loadingDialog = null + } } } }