package com.example.himalayaproject.views;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.example.himalayaproject.R;
import com.example.himalayaproject.base.BaseApplication;
import com.example.himalayaproject.utils.LogUtil;
/**
* @author wangyong
* @date 12/3/20 11:46 AM
*/
public abstract class UILoader extends FrameLayout {
private static final String TAG = "UILoader";
private View mLoadingView;
private View mSuccessView;
private View mNetworkErrorView;
private View mEmptyView;
public enum UIStatus {
LOADING, SUCCESS, NETWORK_ERROR, EMPTY, NONE
}
public UIStatus mCurrentStatus = UIStatus.NONE;
public UILoader(@NonNull Context context) {
this(context, null);
}
public UILoader(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public UILoader(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//
init();
}
public void updateStatus(UIStatus status) {
//UILoader.UIStatus.LOADING
LogUtil.d(TAG, "status-->" + status);
mCurrentStatus = status;
//更新UI一定要在主线程上
BaseApplication.getHandler().post(new Runnable() {
@Override
public void run() {
switchUIByCurrentStatus();
}
});
}
/**
* 初始化UI
*/
private void init() {
switchUIByCurrentStatus();
}
private void switchUIByCurrentStatus() {
//加载中
if (mLoadingView == null) {
LogUtil.d(TAG,"加载中");
mLoadingView = getLoadingView();
addView(mLoadingView);
LogUtil.d(TAG,"加载完成");
}
//根据状态设置是否可见
mLoadingView.setVisibility(mCurrentStatus == UIStatus.LOADING ? VISIBLE : GONE);
//加载成功
if (mSuccessView == null) {
mSuccessView = getSuccessView(this);
LogUtil.d(TAG,"加载成功");
addView(mSuccessView);
}
//根据状态设置是否可见
mSuccessView.setVisibility(mCurrentStatus == UIStatus.SUCCESS ? VISIBLE : GONE);
//网络错误页面
if (mNetworkErrorView == null) {
mNetworkErrorView = getNetworkErrorView();
addView(mNetworkErrorView);
LogUtil.d(TAG,"网络错误--");
}
//根据状态设置是否可见
mNetworkErrorView.setVisibility(mCurrentStatus == UIStatus.NETWORK_ERROR ? VISIBLE : GONE);
//数据为空的页面
if (mEmptyView== null) {
mEmptyView = getEmptyView();
addView(mEmptyView);
LogUtil.d(TAG,"数据为空");
}
//根据状态设置是否可见
mEmptyView.setVisibility(mCurrentStatus == UIStatus.EMPTY ? VISIBLE : GONE);
}
private View getEmptyView() {
return LayoutInflater.from(getContext()).inflate(R.layout.fragment_empty_view, this, false);
}
private View getNetworkErrorView(){
return LayoutInflater.from(getContext()).inflate(R.layout.fragment_error_view, this, false);
}
protected abstract View getSuccessView(ViewGroup container);
protected View getLoadingView() {
LogUtil.d(TAG,"获取loading 页面");
return LayoutInflater.from(getContext()).inflate(R.layout.fragment_loading_view, this, false);
}
}
RecommendFragment类
Recommendfragment something
@Override
protected View onSubViewLoaded(LayoutInflater layoutInflater, ViewGroup container) {
if (mRootView == null) {
mUiLoader = new UILoader(getContext()) {
@Override
protected View getSuccessView(ViewGroup container) {
LogUtil.d(TAG,"getSuccessView 执行了");
return createSuccessView(layoutInflater,container);
}
};
}
private View createSuccessView(LayoutInflater layoutInflater, ViewGroup container) {
mRootView = layoutInflater.inflate(R.layout.fragment_recommend, container, false);
LogUtil.d(TAG, "" + mRootView);
//RecycleView的使用
//1. 第一步找到相应的控件
mRecyclerView = mRootView.findViewById(R.id.recommend_list);
//2. 设置布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(linearLayoutManager);
//设置垂直方向
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
outRect.top = UIUtil.dip2px(view.getContext(), 5);
outRect.bottom = UIUtil.dip2px(view.getContext(), 5);
outRect.left = UIUtil.dip2px(view.getContext(), 5);
outRect.right = UIUtil.dip2px(view.getContext(), 5);
}
});
return mRootView;
}
getRecommendList()方法:
@Override
public void getRecommendList() {
//获取数据之前先加载
updateLoading();
//封装参数 获取推荐内容
Map<String, String> map = new HashMap<>();
//这个参数表示一页数据返回多少条
map.put(DTransferConstants.LIKE_COUNT, String.valueOf(RECOMMEND_CONT));
CommonRequest.getGuessLikeAlbum(map, new IDataCallBack<GussLikeAlbumList>() {
@Override
public void onSuccess(GussLikeAlbumList gussLikeAlbumList) {
LogUtil.d(TAG, "thread name - > " + Thread.currentThread().getName());
//数据获取成功
if (gussLikeAlbumList != null) {
List<Album> albumList = gussLikeAlbumList.getAlbumList();
//拿到集合数据以后更新UI
//upRecommendUI(albumList);
handlerRecommendResult(albumList);
LogUtil.d(TAG, "List Size : " + albumList.size());
for (int i = 0; i < albumList.size(); i++) {
LogUtil.d(TAG, "猜你喜欢 : " + albumList.get(i).getAlbumTitle());
}
}
}
Log: RecommendFragment|UILoader
2020-12-05 18:43:52.852 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 加载中
2020-12-05 18:43:52.852 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 获取loading 页面
2020-12-05 18:43:52.855 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 加载完成
2020-12-05 18:43:52.855 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]RecommendFragment: getSuccessView 执行了
2020-12-05 18:43:52.861 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]RecommendFragment: android.widget.RelativeLayout{654ddb0 V.E...... ......I. 0,0-0,0}
2020-12-05 18:43:52.862 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 加载成功
2020-12-05 18:43:52.865 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 网络错误--
2020-12-05 18:43:52.868 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: 数据为空
2020-12-05 18:43:52.869 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]RecommendFragment: onLoading
2020-12-05 18:43:52.869 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: status-->LOADING
2020-12-05 18:43:53.474 31623-31623/com.example.himalayaproject D/[com.example.himalayaproject]UILoader: status-->SUCCESS
从你的log上来看,很奇怪。流程状态也不对呀。
另外则在毫秒界别上就完成了。可能快到你看不到。
那不是走到了嘛,那你的LoadingView上有啥?也就是你的布局上有啥?其他界面正常 吗?