package com.pandaq.pandaeye.modules.video.videodetail.mvp; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.pandaq.pandaeye.R; import com.pandaq.pandaeye.config.Constants; import com.pandaq.pandaeye.rxbus.RxBus; import com.pandaq.pandaeye.rxbus.RxConstants; import com.pandaq.pandaeye.BaseFragment; import com.pandaq.pandaeye.modules.video.videodetail.VideoCommentAdapter; import com.pandaq.pandaqlib.magicrecyclerView.BaseItem; import com.pandaq.pandaqlib.magicrecyclerView.MagicRecyclerView; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; /** * Created by PandaQ on 2017/3/2. * 评论 fragment */ public class VideoCommentFrag extends BaseFragment implements VideoCommentContract.View, SwipeRefreshLayout.OnRefreshListener { @BindView(R.id.tv_empty_msg) TextView mTvEmptyMsg; @BindView(R.id.mrv_comment) MagicRecyclerView mMrvComment; @BindView(R.id.srl_refresh) SwipeRefreshLayout mSrlRefresh; private VideoCommentAdapter mAdapter; //本次加载数据是否是刷新 private boolean refresh = true; //是否正在加载 private boolean loading = false; //是否正在刷新 private boolean refresing = false; //是否还有评论需要加载 private boolean loadAble = true; private String currentId = "currentId"; private String lastId = "lastId"; private VideoCommentPresenter mCommentPresenter = new VideoCommentPresenter(this); private Disposable mDisposable; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.video_comment_fragment, container, false); ButterKnife.bind(this, view); initView(); return view; } @Override public void onPause() { super.onPause(); mCommentPresenter.dispose(); if (mDisposable != null && !mDisposable.isDisposed()) { mDisposable.dispose(); } } private void initView() { mMrvComment.setLayoutManager(new LinearLayoutManager(this.getContext())); //屏蔽掉默认的动画,房子刷新时图片闪烁 mMrvComment.getItemAnimator().setChangeDuration(0); mSrlRefresh.setProgressBackgroundColorSchemeColor(getResources().getColor(R.color.white_FFFFFF)); mSrlRefresh.setOnRefreshListener(this); mSrlRefresh.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); mMrvComment.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (mMrvComment.loadAble() && !loading && loadAble) { loadComment(); } } }); currentId = getArguments().getString(Constants.BUNDLE_KEY_DATAID); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { if (isVisibleToUser) { //可见时才去加载数据 initRxbus(); if (!lastId.equals(currentId)) { refreshComment(); } } } @Override public void loadComment() { refresh = false; if (!loading) { mCommentPresenter.loadMoreComment(); loading = true; } } @Override public void refreshComment() { mSrlRefresh.setRefreshing(true); refresh = true; if (!refresing) { mCommentPresenter.refreshComment(); refresing = true; } } @Override public String getDataId() { return currentId; } @Override public void showComment(ArrayList<BaseItem> items) { //加载成功后设置当前 Id lastId = currentId; refresing = false; loading = false; mTvEmptyMsg.setVisibility(View.GONE); mSrlRefresh.setRefreshing(false); if (mAdapter != null) { if (refresh) { mAdapter.setBaseDatas(items); } else { mAdapter.addBaseDatas(items); } } else { mAdapter = new VideoCommentAdapter(this); mAdapter.setBaseDatas(items); mMrvComment.setAdapter(mAdapter); } } public void noMore() { loadAble = false; TextView ftText = (TextView) mMrvComment.getFooterView().findViewById(R.id.tv_footer_text); ProgressBar ftPB = (ProgressBar) mMrvComment.getFooterView().findViewById(R.id.cp_progressbar); ftPB.setVisibility(View.GONE); ftText.setText(getString(R.string.nomore_data)); } @Override public void loadFail() { mSrlRefresh.setRefreshing(false); mTvEmptyMsg.setVisibility(View.VISIBLE); } @Override public void onRefresh() { refreshComment(); } /** * 初始化接收评论数据的 RxBus */ private void initRxbus() { //接收 Video ID RxBus .getDefault() .toObservableWithCode(RxConstants.ACCEPT_VIDEO_DATAID, String.class) .subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { mDisposable = d; } @Override public void onNext(String value) { currentId = value; } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }