pref: 优化首页吧列表多列时最后一行样式
This commit is contained in:
parent
54bd414e52
commit
a2ac37eacd
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue