pref: 优化首页吧列表多列时最后一行样式

This commit is contained in:
HuanCheng65 2022-08-05 20:00:07 +08:00
parent 54bd414e52
commit a2ac37eacd
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
3 changed files with 45 additions and 18 deletions

View File

@ -1,6 +1,8 @@
package com.huanchengfly.tieba.post.adapters
import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
import android.view.View
import com.alibaba.android.vlayout.layout.GridLayoutHelper
import com.huanchengfly.tieba.post.R
@ -15,7 +17,7 @@ class MainForumListAdapter(
context: Context,
span: Int = 1
) : BaseMultiTypeDelegateAdapter<ForumRecommend.LikeForum>(
context, GridLayoutHelper(span)
context, GridLayoutHelper(span).apply { setAutoExpand(false) }
) {
companion object {
const val TYPE_LIST = 1
@ -39,11 +41,16 @@ class MainForumListAdapter(
viewType: Int
) {
val cardRadius = context.resources.getDimension(R.dimen.card_radius)
val rippleColor = if (item.isFake) Color.TRANSPARENT else Util.getColorByAttr(
context,
R.attr.colorControlHighlight,
R.color.transparent
)
when {
//单列
spanCount == 1 -> {
viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
rippleColor,
if (position == getCount() - 1) {
getRadiusDrawable(bottomLeftPx = cardRadius, bottomRightPx = cardRadius)
} else {
@ -53,10 +60,7 @@ class MainForumListAdapter(
if (context.appPreferences.listItemsBackgroundIntermixed) {
if (position % 2 == 1) {
viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(
context,
R.color.default_color_card
)
ColorStateList.valueOf(Color.TRANSPARENT)
} else {
viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(
@ -66,18 +70,15 @@ class MainForumListAdapter(
}
} else {
viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(
context,
R.color.default_color_card
)
ColorStateList.valueOf(Color.TRANSPARENT)
}
}
//多列第一个
position % spanCount == 0 -> {
viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(context, R.color.default_color_card)
ColorStateList.valueOf(Color.TRANSPARENT)
viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
rippleColor,
when (position) {
//最后一行,左
getCount() - spanCount -> getRadiusDrawable(bottomLeftPx = cardRadius)
@ -94,9 +95,9 @@ class MainForumListAdapter(
//多列右
else -> {
viewHolder.itemView.backgroundTintList =
ColorStateListUtils.createColorStateList(context, R.color.default_color_card)
ColorStateList.valueOf(Color.TRANSPARENT)
viewHolder.itemView.background = wrapRipple(
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
rippleColor,
if (position == getCount() - 1) {
getRadiusDrawable(bottomRightPx = cardRadius)
} else {
@ -105,6 +106,15 @@ class MainForumListAdapter(
)
}
}
if (viewType == TYPE_GRID) {
val visibility = if (item.isFake) View.INVISIBLE else View.VISIBLE
listOf(
R.id.forum_list_item_status,
R.id.forum_list_item_name
).forEach {
viewHolder.setVisibility(it, visibility)
}
}
if (spanCount > 1) {
ImageUtil.clear(viewHolder.getView(R.id.forum_list_item_avatar))
} else {

View File

@ -20,6 +20,8 @@ data class ForumRecommend(
var levelId: String,
@SerializedName("is_sign")
var isSign: String,
var avatar: String
var avatar: String,
@Transient
var isFake: Boolean = false
)
}

View File

@ -83,6 +83,8 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
private lateinit var mainForumListAdapter: MainForumListAdapter
private lateinit var topForumListAdapter: MainForumListAdapter
var listSingle: Boolean = false
fun reset() {
if (isFragmentVisible) {
mRefreshView.autoRefresh()
@ -120,11 +122,12 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
super.onCreate(savedInstanceState)
virtualLayoutManager = VirtualLayoutManager(attachContext)
delegateAdapter = DelegateAdapter(virtualLayoutManager)
listSingle = appPreferences.listSingle
}
private val spanCount: Int
get() = when {
appPreferences.listSingle -> {
listSingle -> {
1
}
attachContext.isTablet -> {
@ -282,7 +285,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
) {
mData = response.body()
if (mData != null) {
mainForumListAdapter.setData(mData!!.likeForum)
mainForumListAdapter.setData(mData!!.likeForum.addFakeItems(spanCount))
mRefreshView.finishRefresh(false)
} else {
Toast.makeText(attachContext, R.string.error_unknown, Toast.LENGTH_SHORT)
@ -294,6 +297,15 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
})
}
private fun List<ForumRecommend.LikeForum>.addFakeItems(divisor: Int): List<ForumRecommend.LikeForum> {
val fakeItemCount = divisor - (size % divisor)
return toMutableList().apply {
repeat(fakeItemCount) {
add(ForumRecommend.LikeForum("", "", "1", "0", "", isFake = true))
}
}
}
override fun onRefresh() {
if (isFragmentVisible) {
mRefreshView.autoRefresh()
@ -310,7 +322,8 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
true
}
R.id.menu_switch_list -> {
appPreferences.listSingle = !appPreferences.listSingle
listSingle = !listSingle
appPreferences.listSingle = listSingle
reloadAdapters()
true
}
@ -319,6 +332,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
}
override fun onClick(viewHolder: MyViewHolder, item: ForumRecommend.LikeForum, position: Int) {
if (item.isFake) return
PreloadUtil.startActivityWithPreload(
attachContext,
Intent(
@ -334,6 +348,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
item: ForumRecommend.LikeForum,
position: Int
): Boolean {
if (item.isFake) return false
val popupMenu = PopupUtil.create(viewHolder.itemView).apply {
menuInflater.inflate(R.menu.menu_forum_long_click, menu)
}