pref: 优化首页吧列表多列时最后一行样式
This commit is contained in:
parent
54bd414e52
commit
a2ac37eacd
|
|
@ -1,6 +1,8 @@
|
||||||
package com.huanchengfly.tieba.post.adapters
|
package com.huanchengfly.tieba.post.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.ColorStateList
|
||||||
|
import android.graphics.Color
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.alibaba.android.vlayout.layout.GridLayoutHelper
|
import com.alibaba.android.vlayout.layout.GridLayoutHelper
|
||||||
import com.huanchengfly.tieba.post.R
|
import com.huanchengfly.tieba.post.R
|
||||||
|
|
@ -15,7 +17,7 @@ class MainForumListAdapter(
|
||||||
context: Context,
|
context: Context,
|
||||||
span: Int = 1
|
span: Int = 1
|
||||||
) : BaseMultiTypeDelegateAdapter<ForumRecommend.LikeForum>(
|
) : BaseMultiTypeDelegateAdapter<ForumRecommend.LikeForum>(
|
||||||
context, GridLayoutHelper(span)
|
context, GridLayoutHelper(span).apply { setAutoExpand(false) }
|
||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
const val TYPE_LIST = 1
|
const val TYPE_LIST = 1
|
||||||
|
|
@ -39,11 +41,16 @@ class MainForumListAdapter(
|
||||||
viewType: Int
|
viewType: Int
|
||||||
) {
|
) {
|
||||||
val cardRadius = context.resources.getDimension(R.dimen.card_radius)
|
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 {
|
when {
|
||||||
//单列
|
//单列
|
||||||
spanCount == 1 -> {
|
spanCount == 1 -> {
|
||||||
viewHolder.itemView.background = wrapRipple(
|
viewHolder.itemView.background = wrapRipple(
|
||||||
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
|
rippleColor,
|
||||||
if (position == getCount() - 1) {
|
if (position == getCount() - 1) {
|
||||||
getRadiusDrawable(bottomLeftPx = cardRadius, bottomRightPx = cardRadius)
|
getRadiusDrawable(bottomLeftPx = cardRadius, bottomRightPx = cardRadius)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -53,10 +60,7 @@ class MainForumListAdapter(
|
||||||
if (context.appPreferences.listItemsBackgroundIntermixed) {
|
if (context.appPreferences.listItemsBackgroundIntermixed) {
|
||||||
if (position % 2 == 1) {
|
if (position % 2 == 1) {
|
||||||
viewHolder.itemView.backgroundTintList =
|
viewHolder.itemView.backgroundTintList =
|
||||||
ColorStateListUtils.createColorStateList(
|
ColorStateList.valueOf(Color.TRANSPARENT)
|
||||||
context,
|
|
||||||
R.color.default_color_card
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
viewHolder.itemView.backgroundTintList =
|
viewHolder.itemView.backgroundTintList =
|
||||||
ColorStateListUtils.createColorStateList(
|
ColorStateListUtils.createColorStateList(
|
||||||
|
|
@ -66,18 +70,15 @@ class MainForumListAdapter(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
viewHolder.itemView.backgroundTintList =
|
viewHolder.itemView.backgroundTintList =
|
||||||
ColorStateListUtils.createColorStateList(
|
ColorStateList.valueOf(Color.TRANSPARENT)
|
||||||
context,
|
|
||||||
R.color.default_color_card
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//多列第一个
|
//多列第一个
|
||||||
position % spanCount == 0 -> {
|
position % spanCount == 0 -> {
|
||||||
viewHolder.itemView.backgroundTintList =
|
viewHolder.itemView.backgroundTintList =
|
||||||
ColorStateListUtils.createColorStateList(context, R.color.default_color_card)
|
ColorStateList.valueOf(Color.TRANSPARENT)
|
||||||
viewHolder.itemView.background = wrapRipple(
|
viewHolder.itemView.background = wrapRipple(
|
||||||
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
|
rippleColor,
|
||||||
when (position) {
|
when (position) {
|
||||||
//最后一行,左
|
//最后一行,左
|
||||||
getCount() - spanCount -> getRadiusDrawable(bottomLeftPx = cardRadius)
|
getCount() - spanCount -> getRadiusDrawable(bottomLeftPx = cardRadius)
|
||||||
|
|
@ -94,9 +95,9 @@ class MainForumListAdapter(
|
||||||
//多列右
|
//多列右
|
||||||
else -> {
|
else -> {
|
||||||
viewHolder.itemView.backgroundTintList =
|
viewHolder.itemView.backgroundTintList =
|
||||||
ColorStateListUtils.createColorStateList(context, R.color.default_color_card)
|
ColorStateList.valueOf(Color.TRANSPARENT)
|
||||||
viewHolder.itemView.background = wrapRipple(
|
viewHolder.itemView.background = wrapRipple(
|
||||||
Util.getColorByAttr(context, R.attr.colorControlHighlight, R.color.transparent),
|
rippleColor,
|
||||||
if (position == getCount() - 1) {
|
if (position == getCount() - 1) {
|
||||||
getRadiusDrawable(bottomRightPx = cardRadius)
|
getRadiusDrawable(bottomRightPx = cardRadius)
|
||||||
} else {
|
} 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) {
|
if (spanCount > 1) {
|
||||||
ImageUtil.clear(viewHolder.getView(R.id.forum_list_item_avatar))
|
ImageUtil.clear(viewHolder.getView(R.id.forum_list_item_avatar))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ data class ForumRecommend(
|
||||||
var levelId: String,
|
var levelId: String,
|
||||||
@SerializedName("is_sign")
|
@SerializedName("is_sign")
|
||||||
var isSign: String,
|
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 mainForumListAdapter: MainForumListAdapter
|
||||||
private lateinit var topForumListAdapter: MainForumListAdapter
|
private lateinit var topForumListAdapter: MainForumListAdapter
|
||||||
|
|
||||||
|
var listSingle: Boolean = false
|
||||||
|
|
||||||
fun reset() {
|
fun reset() {
|
||||||
if (isFragmentVisible) {
|
if (isFragmentVisible) {
|
||||||
mRefreshView.autoRefresh()
|
mRefreshView.autoRefresh()
|
||||||
|
|
@ -120,11 +122,12 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
virtualLayoutManager = VirtualLayoutManager(attachContext)
|
virtualLayoutManager = VirtualLayoutManager(attachContext)
|
||||||
delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
||||||
|
listSingle = appPreferences.listSingle
|
||||||
}
|
}
|
||||||
|
|
||||||
private val spanCount: Int
|
private val spanCount: Int
|
||||||
get() = when {
|
get() = when {
|
||||||
appPreferences.listSingle -> {
|
listSingle -> {
|
||||||
1
|
1
|
||||||
}
|
}
|
||||||
attachContext.isTablet -> {
|
attachContext.isTablet -> {
|
||||||
|
|
@ -282,7 +285,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
) {
|
) {
|
||||||
mData = response.body()
|
mData = response.body()
|
||||||
if (mData != null) {
|
if (mData != null) {
|
||||||
mainForumListAdapter.setData(mData!!.likeForum)
|
mainForumListAdapter.setData(mData!!.likeForum.addFakeItems(spanCount))
|
||||||
mRefreshView.finishRefresh(false)
|
mRefreshView.finishRefresh(false)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(attachContext, R.string.error_unknown, Toast.LENGTH_SHORT)
|
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() {
|
override fun onRefresh() {
|
||||||
if (isFragmentVisible) {
|
if (isFragmentVisible) {
|
||||||
mRefreshView.autoRefresh()
|
mRefreshView.autoRefresh()
|
||||||
|
|
@ -310,7 +322,8 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.menu_switch_list -> {
|
R.id.menu_switch_list -> {
|
||||||
appPreferences.listSingle = !appPreferences.listSingle
|
listSingle = !listSingle
|
||||||
|
appPreferences.listSingle = listSingle
|
||||||
reloadAdapters()
|
reloadAdapters()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -319,6 +332,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(viewHolder: MyViewHolder, item: ForumRecommend.LikeForum, position: Int) {
|
override fun onClick(viewHolder: MyViewHolder, item: ForumRecommend.LikeForum, position: Int) {
|
||||||
|
if (item.isFake) return
|
||||||
PreloadUtil.startActivityWithPreload(
|
PreloadUtil.startActivityWithPreload(
|
||||||
attachContext,
|
attachContext,
|
||||||
Intent(
|
Intent(
|
||||||
|
|
@ -334,6 +348,7 @@ class MainForumListFragment : BaseFragment(), Refreshable, Toolbar.OnMenuItemCli
|
||||||
item: ForumRecommend.LikeForum,
|
item: ForumRecommend.LikeForum,
|
||||||
position: Int
|
position: Int
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
if (item.isFake) return false
|
||||||
val popupMenu = PopupUtil.create(viewHolder.itemView).apply {
|
val popupMenu = PopupUtil.create(viewHolder.itemView).apply {
|
||||||
menuInflater.inflate(R.menu.menu_forum_long_click, menu)
|
menuInflater.inflate(R.menu.menu_forum_long_click, menu)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue