将列表的 skeleton 相关代码移动到基类

This commit is contained in:
chenjuntao
2019-09-17 11:01:57 +08:00
parent 13011804ab
commit 3a63d049dc
8 changed files with 35 additions and 146 deletions

View File

@ -4,15 +4,6 @@ import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.normal.NormalFragment;
import com.halo.assistant.HaloApp;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
@ -21,6 +12,17 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.ethanhua.skeleton.SkeletonScreen;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.normal.NormalFragment;
import com.halo.assistant.HaloApp;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import butterknife.BindView;
import io.reactivex.Observable;
import io.reactivex.Single;
@ -50,6 +52,9 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
protected LinearLayoutManager mLayoutManager;
@Nullable
protected SkeletonScreen mSkeletonScreen;
protected abstract ListAdapter provideListAdapter();
protected RecyclerView.ItemDecoration getItemDecoration() {
@ -167,6 +172,7 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
}
public void onLoadRefresh() {
showSkeleton(true);
mReuseNoConn.setVisibility(View.GONE);
mReuseNoData.setVisibility(View.GONE);
mListLoading.setVisibility(View.VISIBLE);
@ -177,6 +183,7 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
}
public void onLoadDone() {
showSkeleton(false);
mReuseNoConn.setVisibility(View.GONE);
mReuseNoData.setVisibility(View.GONE);
mListLoading.setVisibility(View.GONE);
@ -191,6 +198,7 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
}
public void onLoadError() {
showSkeleton(false);
mReuseNoConn.setVisibility(View.VISIBLE);
mReuseNoData.setVisibility(View.GONE);
mListLoading.setVisibility(View.GONE);
@ -199,6 +207,7 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
}
public void onLoadEmpty() {
showSkeleton(false);
mReuseNoConn.setVisibility(View.GONE);
mReuseNoData.setVisibility(View.VISIBLE);
mListLoading.setVisibility(View.GONE);
@ -206,6 +215,16 @@ public abstract class ListFragment<T, VM extends BaseListViewModel /* 该泛型
hideRefreshingLayout();
}
protected void showSkeleton(boolean showSkeleton) {
if (mSkeletonScreen != null) {
if (showSkeleton) {
mSkeletonScreen.show();
} else {
mSkeletonScreen.hide();
}
}
}
// 需要自动加载更多的页面重载这个方法 (默认空方法)
protected void autoLoadMore() {

View File

@ -6,7 +6,6 @@ import android.view.View
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gh.common.util.EntranceUtils
import com.gh.common.view.VerticalItemDecoration
import com.gh.gamecenter.R
@ -21,7 +20,6 @@ class CategoryDirectoryFragment : ListFragment<CategoryEntity, CategoryDirectory
private lateinit var mViewModel: CategoryDirectoryListViewModel
private lateinit var mAdapter: CategoryDirectoryAdapter
private lateinit var mSkeleton: ViewSkeletonScreen
override fun getLayoutId(): Int {
return R.layout.fragment_list_base_skeleton
@ -40,27 +38,7 @@ class CategoryDirectoryFragment : ListFragment<CategoryEntity, CategoryDirectory
mListRv.setBackgroundColor(Color.WHITE)
mAdapter.recyclerView = mListRv
mListRefresh?.isEnabled = false
mSkeleton = Skeleton.bind(mListSkeleton).shimmer(false).load(R.layout.fragment_category_skeleton).show()
}
override fun onLoadDone() {
super.onLoadDone()
postDelayedRunnable({ mSkeleton.hide() }, 500)
}
override fun onLoadEmpty() {
super.onLoadEmpty()
mSkeleton.hide()
}
override fun onLoadError() {
super.onLoadError()
mSkeleton.hide()
}
override fun onRefresh() {
mSkeleton.show()
super.onRefresh()
mSkeletonScreen = Skeleton.bind(mListSkeleton).shimmer(false).load(R.layout.fragment_category_skeleton).show()
}
override fun provideListAdapter(): ListAdapter<*> {

View File

@ -6,7 +6,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gh.common.constant.Constants
import com.gh.common.exposure.ExposureListener
import com.gh.common.util.EntranceUtils
@ -47,7 +46,6 @@ class NewCategoryListFragment : ListFragment<GameEntity, NewCategoryListViewMode
}
}
private lateinit var mSkeleton: ViewSkeletonScreen
private lateinit var mExposureListener: ExposureListener
private lateinit var mViewModel: NewCategoryListViewModel
@ -92,7 +90,7 @@ class NewCategoryListFragment : ListFragment<GameEntity, NewCategoryListViewMode
updateCategoriesView(mSubCategoryList)
mSkeleton = Skeleton.bind(skeletonView).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
mSkeletonScreen = Skeleton.bind(skeletonView).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
}
override fun onResume() {
@ -137,21 +135,6 @@ class NewCategoryListFragment : ListFragment<GameEntity, NewCategoryListViewMode
}
}
override fun onLoadDone() {
super.onLoadDone()
mSkeleton.hide()
}
override fun onLoadEmpty() {
super.onLoadEmpty()
mSkeleton.hide()
}
override fun onLoadError() {
super.onLoadError()
mSkeleton.hide()
}
override fun onLoadRefresh() {
mBaseHandler.postDelayed({ mListViewModel.load(LoadType.REFRESH) }, 200)
@ -162,7 +145,6 @@ class NewCategoryListFragment : ListFragment<GameEntity, NewCategoryListViewMode
}
override fun onRefresh() {
mSkeleton.show()
mAdapter?.clearPositionAndPackageMap()
super.onRefresh()

View File

@ -3,7 +3,6 @@ package com.gh.gamecenter.history
import android.os.Bundle
import android.view.View
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gh.common.util.viewModelProvider
import com.gh.gamecenter.R
import com.gh.gamecenter.baselist.ListFragment
@ -14,8 +13,6 @@ open class HistoryGameListFragment : ListFragment<GameEntity, HistoryGameListVie
private val mListSkeleton by bindView<View>(R.id.list_skeleton)
private lateinit var mSkeleton: ViewSkeletonScreen
private var mAdapter: HistoryGameListAdapter? = null
override fun getLayoutId(): Int {
@ -36,27 +33,7 @@ open class HistoryGameListFragment : ListFragment<GameEntity, HistoryGameListVie
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mSkeleton = Skeleton.bind(mListSkeleton).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
}
override fun onLoadDone() {
super.onLoadDone()
mSkeleton.hide()
}
override fun onLoadEmpty() {
super.onLoadEmpty()
mSkeleton.hide()
}
override fun onLoadError() {
super.onLoadError()
mSkeleton.hide()
}
override fun onRefresh() {
mSkeleton.show()
super.onRefresh()
mSkeletonScreen = Skeleton.bind(mListSkeleton).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
}
}

View File

@ -25,6 +25,8 @@ data class QuestionsDetailEntity(var id: String? = null,
var community: CommunityEntity = CommunityEntity(),
var isExistDrafts: Boolean = false,
var me: MeEntity = MeEntity(),
@SerializedName("is_smart_invite")
var isSmartInvited: Boolean = false,
@SerializedName("follow_count")
private var followCount: Int = 0) : Parcelable {

View File

@ -26,7 +26,6 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.RecyclerView;
import com.ethanhua.skeleton.Skeleton;
import com.ethanhua.skeleton.SkeletonScreen;
import com.gh.base.fragment.BaseDialogWrapperFragment;
import com.gh.common.TimeElapsedHelper;
import com.gh.common.util.CheckLoginUtils;
@ -93,8 +92,6 @@ public class QuestionsDetailFragment
extends ListFragment<AnswerEntity, QuestionsDetailViewModel>
implements TagsSelectFragment.OnModeratorPatchTagsCallback {
public static final String TAG = "ask.questionsdetail.QuestionsDetailFragment";
public static final int QUESTIONS_DETAIL_ANSWER_REQUEST = 110;
public static final int QUESTIONS_EDIT_REQUEST = 111;
public static final int QUESTIONS_MODERATOR_HISTORY_REQUEST = 112;
@ -116,7 +113,6 @@ public class QuestionsDetailFragment
private String mPath;
private TimeElapsedHelper mElapsedHelper;
private SkeletonScreen mSkeletonScreen;
public static QuestionsDetailFragment getInstance(String questionsId) {
QuestionsDetailFragment fragment = new QuestionsDetailFragment();
@ -282,30 +278,6 @@ public class QuestionsDetailFragment
}
}
@Override
public void onLoadDone() {
super.onLoadDone();
mSkeletonScreen.hide();
}
@Override
public void onLoadError() {
super.onLoadError();
mSkeletonScreen.hide();
}
@Override
public void onLoadRefresh() {
super.onLoadRefresh();
mSkeletonScreen.show();
}
@Override
public void onLoadEmpty() {
super.onLoadEmpty();
mSkeletonScreen.hide();
}
@Override
public Observable<List<AnswerEntity>> provideDataObservable(int page) {
return RetrofitManager.getInstance(getContext()).getApi()

View File

@ -5,7 +5,6 @@ import android.view.View
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.RecyclerView
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gh.common.exposure.ExposureListener
import com.gh.common.util.EntranceUtils
import com.gh.download.DownloadManager
@ -24,8 +23,6 @@ import org.greenrobot.eventbus.ThreadMode
class SubjectListFragment : ListFragment<GameEntity, SubjectListViewModel>(), OnTitleClickListener {
private lateinit var mSkeleton: ViewSkeletonScreen
private lateinit var mExposureListener: ExposureListener
private var mAdapter: SubjectAdapter? = null
@ -57,7 +54,7 @@ class SubjectListFragment : ListFragment<GameEntity, SubjectListViewModel>(), On
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mSkeleton = Skeleton
mSkeletonScreen = Skeleton
.bind(mCachedView.findViewById<View>(R.id.list_skeleton))
.shimmer(false)
.load(R.layout.fragment_subject_skeleton).show()
@ -108,26 +105,6 @@ class SubjectListFragment : ListFragment<GameEntity, SubjectListViewModel>(), On
DownloadManager.getInstance(context).removeObserver(dataWatcher)
}
override fun onLoadDone() {
super.onLoadDone()
mSkeleton.hide()
}
override fun onLoadEmpty() {
super.onLoadEmpty()
mSkeleton.hide()
}
override fun onLoadError() {
super.onLoadError()
mSkeleton.hide()
}
override fun onRefresh() {
mSkeleton.show()
super.onRefresh()
}
// 下载被删除事件
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(status: EBDownloadStatus) {

View File

@ -6,7 +6,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import com.ethanhua.skeleton.Skeleton
import com.ethanhua.skeleton.ViewSkeletonScreen
import com.gh.common.util.observeNonNull
import com.gh.common.util.viewModelProvider
import com.gh.common.view.ConfigFilterView
@ -42,7 +41,6 @@ class TagsListFragment : ListFragment<GameEntity, TagsListViewModel>() {
}
}
private lateinit var mSkeleton: ViewSkeletonScreen
private lateinit var mViewModel: TagsListViewModel
override fun onCreate(savedInstanceState: Bundle?) {
@ -83,7 +81,7 @@ class TagsListFragment : ListFragment<GameEntity, TagsListViewModel>() {
}
})
mSkeleton = Skeleton.bind(skeletonView).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
mSkeletonScreen = Skeleton.bind(skeletonView).shimmer(false).load(R.layout.fragment_subject_skeleton).show()
}
override fun onResume() {
@ -122,21 +120,6 @@ class TagsListFragment : ListFragment<GameEntity, TagsListViewModel>() {
}
}
override fun onLoadDone() {
super.onLoadDone()
mSkeleton.hide()
}
override fun onLoadEmpty() {
super.onLoadEmpty()
mSkeleton.hide()
}
override fun onLoadError() {
super.onLoadError()
mSkeleton.hide()
}
override fun onLoadRefresh() {
if (mReuseNoConn.visibility == View.VISIBLE
&& (tagsRecyclerView.adapter == null || tagsRecyclerView.adapter?.itemCount == 0)) {
@ -152,7 +135,6 @@ class TagsListFragment : ListFragment<GameEntity, TagsListViewModel>() {
}
override fun onRefresh() {
mSkeleton.show()
mAdapter?.clearPositionAndPackageMap()
super.onRefresh()
}