Compare commits

...

2 Commits

Author SHA1 Message Date
524270dde7 Merge remote-tracking branch 'origin/master' 2025-01-17 21:44:23 +08:00
f80c23c90a refactor(community): 重构社区界面布局和功能
- 移除了底部导航栏
- 优化了推荐页面布局,添加了轮播图和下拉刷新功能- 调整了排名页面布局
- 修复了一些代码注释和未使用变量
2025-01-17 21:44:16 +08:00
6 changed files with 163 additions and 196 deletions

View File

@ -8,7 +8,9 @@ import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2
import com.coldmint.rust.pro.R
import com.coldmint.rust.pro.adapters.CommunityAdapter
import com.coldmint.rust.pro.tool.Tools
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.navigationrail.NavigationRailView
class CommunityFragment : Fragment() {
@ -19,9 +21,6 @@ class CommunityFragment : Fragment() {
if (!isAdded) {
return
}
/* else {
viewBinding.pager.postDelayed({ loadTab() }, MainActivity.linkInterval)
}*/
}
override fun onCreateView(
@ -29,7 +28,6 @@ class CommunityFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
val inflate = inflater.inflate(R.layout.fragment_community, container, false)
onViewCreated(inflate)
return inflate
@ -38,6 +36,10 @@ class CommunityFragment : Fragment() {
private fun onViewCreated(view: View) {
val navigationBarView : NavigationBarView = view.findViewById(R.id.bottomnavigationView)
val pager : ViewPager2 = view.findViewById(R.id.pager)
if (Tools.isTabletMode(requireContext())) {
// var navigation = navigationBarView as NavigationRailView
// navigation.setonc
}
pager.adapter = CommunityAdapter(this)
pager.isSaveEnabled = false
pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
@ -76,46 +78,4 @@ class CommunityFragment : Fragment() {
true
}
}
// override fun whenViewCreated(inflater: LayoutInflater, savedInstanceState: Bundle?) {
// viewBinding.pager.adapter = CommunityAdapter(this)
// viewBinding.pager.isSaveEnabled = false
// viewBinding.pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
// override fun onPageSelected(position: Int) {
// when (position) {
// 0 -> {
// viewBinding.bottomnavigationView.selectedItemId = R.id.action_recommended
// }
// 1 -> {
// viewBinding.bottomnavigationView.selectedItemId = R.id.action_follow
// }
// 2 -> {
// viewBinding.bottomnavigationView.selectedItemId = R.id.action_ranking
// }
// 3 -> {
// viewBinding.bottomnavigationView.selectedItemId = R.id.action_my
// }
// }
// }
// })
// viewBinding.bottomnavigationView.setOnItemSelectedListener {
// when (it.itemId) {
// R.id.action_recommended -> {
// viewBinding.pager.currentItem = 0
// }
// R.id.action_follow -> {
// viewBinding.pager.currentItem = 1
// }
// R.id.action_ranking -> {
// viewBinding.pager.currentItem = 2
// }
// R.id.action_my -> {
// viewBinding.pager.currentItem = 3
// }
// }
// true
// }
//
//
// loadTab()
// }
}

View File

@ -87,7 +87,6 @@ class RankingFragment : BaseFragment<FragmentRankingBinding>() {
private fun loadMods() {
viewBinding.progressBar.isVisible = true
viewBinding.textview.isVisible = false
// viewBinding.swipeRefreshLayout.isVisible = false
WebMod.instance.list(object : ApiCallBack<WebModListData> {
override fun onResponse(t: WebModListData) {
if (!isAdded) {

View File

@ -3,8 +3,6 @@ package com.coldmint.rust.pro.fragments
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import com.bumptech.glide.Glide
import com.coldmint.dialog.CoreDialog
@ -28,6 +26,7 @@ import com.youth.banner.adapter.BannerImageAdapter
import com.youth.banner.holder.BannerImageHolder
import com.youth.banner.indicator.CircleIndicator
class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
/**
@ -67,32 +66,34 @@ class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
/**
* 加载随机推荐
*/
fun loadRandomRecommended() {
private fun loadRandomRecommended() {
viewBinding.randomRecommendedProgressIndicator.isVisible = true
WebMod.instance.randomRecommended(6, object : ApiCallBack<WebModListData> {
override fun onResponse(t: WebModListData) {
val data = t.data?.toMutableList()
if (data == null || data.isEmpty()) {
if (data.isNullOrEmpty()) {
viewBinding.randomRecommendedProgressIndicator.isVisible = false
viewBinding.swipeRefreshLayout.isRefreshing = false
} else {
viewBinding.randomRecommendedProgressIndicator.isVisible = false
viewBinding.randomRecommendedView.isVisible = true
viewBinding.randomRecommendedView.adapter = createAdapter(data)
viewBinding.swipeRefreshLayout.isRefreshing = false
}
}
override fun onFailure(e: Exception) {
e.printStackTrace()
viewBinding.randomRecommendedProgressIndicator.isVisible = false
viewBinding.swipeRefreshLayout.isRefreshing = false
}
})
}
/**
* 加载个性化推荐
*/
fun loadSoleRecommended() {
private fun loadSoleRecommended() {
viewBinding.soleRecommendedCardView.isVisible = false
viewBinding.soleRecommendedProgressIndicator.isVisible = true
val account = AppSettings.getValue(AppSettings.Setting.Account, "")
@ -123,17 +124,17 @@ class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
/**
* 加载轮播图数据
*/
fun loadBannerData() {
private fun loadBannerData() {
BannerManager.instance.getItems(object : ApiCallBack<BannerItemDataBean> {
override fun onResponse(t: BannerItemDataBean) {
if (t.code == ServerConfiguration.Success_Code) {
val dataList = t.data
if (dataList != null && dataList.isNotEmpty()) {
if (!dataList.isNullOrEmpty()) {
val forever =
AppSettings.getValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
) == (-2).toLong()
AppSettings.getValue(
AppSettings.Setting.ExpirationTime,
0.toLong()
) == (-2).toLong()
val textStyleMaker = TextStyleMaker.instance
val showList = dataList.filter {
var show = true
@ -145,31 +146,31 @@ class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
show
}
viewBinding.banner.setAdapter(object :
BannerImageAdapter<BannerItemDataBean.Data>(showList) {
BannerImageAdapter<BannerItemDataBean.Data>(showList) {
override fun onBindView(
holder: BannerImageHolder?,
data: BannerItemDataBean.Data?,
position: Int,
size: Int
holder: BannerImageHolder?,
data: BannerItemDataBean.Data?,
position: Int,
size: Int
) {
if (holder != null && data != null) {
Glide.with(holder.itemView).load(data.picture)
.apply(GlobalMethod.getRequestOptions())
.into(holder.imageView)
.apply(GlobalMethod.getRequestOptions())
.into(holder.imageView)
holder.imageView.setOnClickListener {
val type = textStyleMaker.getType(data.link)
val linkData = textStyleMaker.getData(data.link)
if (type == null || linkData == null) {
CoreDialog(requireContext()).setTitle(data.title)
.setMessage(data.link)
.setPositiveButton(R.string.dialog_ok) {
.setMessage(data.link)
.setPositiveButton(R.string.dialog_ok) {
}.setCancelable(false).show()
}.setCancelable(false).show()
} else {
textStyleMaker.clickEvent(
requireContext(),
type,
linkData
requireContext(),
type,
linkData
)
}
}
@ -231,11 +232,16 @@ class RecommendedFragment : BaseFragment<FragmentRecommendedBinding>() {
override fun whenViewCreated(inflater: LayoutInflater, savedInstanceState: Bundle?) {
viewBinding.latestReleaseView.layoutManager = ScrollLinearLayoutManager(requireContext())
viewBinding.soleRecommendedRecyclerView.layoutManager =
ScrollLinearLayoutManager(requireContext())
ScrollLinearLayoutManager(requireContext())
viewBinding.randomRecommendedView.layoutManager = ScrollLinearLayoutManager(requireContext())
loadRandomRecommended()
viewBinding.changeRandomRecommended.setOnClickListener {
// 下拉刷新随机推荐的模组
viewBinding.swipeRefreshLayout.setOnRefreshListener {
loadRandomRecommended()
}
// 动态设置Banner高度
viewBinding.bannerCardView.layoutParams.height = (resources.displayMetrics.heightPixels / 2.5).toInt()
viewBinding.bannerCardView.requestLayout()
}
}

View File

@ -15,11 +15,4 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<!-- <com.google.android.material.bottomnavigation.BottomNavigationView-->
<!-- android:id="@+id/bottomnavigationView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:menu="@menu/menu_main_bottom" />-->
</LinearLayout>

View File

@ -87,8 +87,7 @@
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:background="#fff" />
android:overScrollMode="ifContentScrolls" />
<com.scwang.smart.refresh.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

View File

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:animateLayoutChanges="true"
android:gravity="center"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
@ -21,142 +22,151 @@
android:text="@string/info"
android:visibility="gone" />
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:visibility="visible">
<LinearLayout
android:layout_marginTop="8dp">
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="200dp"
app:banner_indicator_selected_color="?attr/colorPrimary" />
</com.google.android.material.card.MaterialCardView>
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
android:fillViewport="true"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/bannerCardView"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="200dp">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:banner_indicator_selected_color="?attr/colorPrimary" />
</com.google.android.material.card.MaterialCardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="0dp"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/random_recommended" />
android:gravity="center_vertical">
<Button
android:id="@+id/changeRandomRecommended"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/random_recommended" />
<!-- <Button-->
<!-- android:id="@+id/changeRandomRecommended"-->
<!-- style="@style/Widget.Material3.Button.TextButton"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="@string/change_random_recommended"-->
<!-- card_view:ignore="RelativeOverlap" />-->
</LinearLayout>
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/randomRecommendedProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/change_random_recommended"
card_view:ignore="RelativeOverlap" />
android:layout_marginTop="8dp"
android:indeterminate="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/randomRecommendedView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false"
android:visibility="gone" />
</LinearLayout>
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/randomRecommendedProgressIndicator"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:indeterminate="true" />
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/latest_release" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/latestReleaseProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:indeterminate="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/randomRecommendedView"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/latestReleaseView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false" />
</LinearLayout>
<LinearLayout
android:id="@+id/soleRecommendedCardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false"
android:visibility="gone" />
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pay_attention_new" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/soleRecommendedProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:indeterminate="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/soleRecommendedRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/latest_release" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/latestReleaseProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:indeterminate="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/latestReleaseView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false"
android:layout_marginTop="8dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/soleRecommendedCardView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
style="@style/TextAppearance.Material3.HeadlineSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pay_attention_new" />
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/soleRecommendedProgressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:indeterminate="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/soleRecommendedRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="false"
android:nestedScrollingEnabled="false"
android:layout_marginTop="8dp" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>