diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/MainForumListAdapter.kt b/app/src/main/java/com/huanchengfly/tieba/post/adapters/MainForumListAdapter.kt index 102936d0..4b93767b 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/MainForumListAdapter.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/MainForumListAdapter.kt @@ -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( - 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 { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/api/models/ForumRecommend.kt b/app/src/main/java/com/huanchengfly/tieba/post/api/models/ForumRecommend.kt index 9ff51960..fed63318 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/api/models/ForumRecommend.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/api/models/ForumRecommend.kt @@ -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 ) } \ No newline at end of file diff --git a/app/src/main/java/com/huanchengfly/tieba/post/fragments/MainForumListFragment.kt b/app/src/main/java/com/huanchengfly/tieba/post/fragments/MainForumListFragment.kt index ab7e3ae7..25407b81 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/fragments/MainForumListFragment.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/fragments/MainForumListFragment.kt @@ -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.addFakeItems(divisor: Int): List { + 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) }