package com.edufound.reader.presenter; import android.content.Intent; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.edufound.reader.activity.OthersRecordActivity; import com.edufound.reader.adapter.MyFollowItemAdapter; import com.edufound.reader.base.BaseActivity; import com.edufound.reader.base.BasePresenter; import com.edufound.reader.bean.HttpResultBean; import com.edufound.reader.bean.HttpResultDataListBean; import com.edufound.reader.bean.MyFollowBean; import com.edufound.reader.bean.UserRecordBean; import com.edufound.reader.contract.MyFollowContract; import com.edufound.reader.listener.RecyclerItemClickListener; import com.edufound.reader.model.MyFollowModel; import com.edufound.reader.util.SizeUtils; import com.google.gson.reflect.TypeToken; import com.jakewharton.rxbinding4.view.RxView; import com.okhttplib.HttpInfo; import com.okhttplib.callback.Callback; import com.orhanobut.logger.Logger; import java.io.IOException; import java.util.ArrayList; import java.util.List; import androidx.annotation.RequiresApi; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import io.reactivex.rxjava3.annotations.NonNull; public class MyFollowPresenter extends BasePresenter implements MyFollowContract.Presenter { MyFollowModel mModel; List mDataList; MyFollowItemAdapter myFollowItemAdapter; int mPageIndex = 1; int mTotalSize = 0; boolean loadOver = false; int toNextPosition = 0; public MyFollowPresenter() { mModel = new MyFollowModel(); // mDataList = new ArrayList<>(); // for (int i = 0; i < 30; i++) { // mDataList.add("i=" + i); // } } @RequiresApi(api = Build.VERSION_CODES.M) @Override public void initRecyclerView(RecyclerView rv) { if (mDataList == null || mDataList.size() <= 0) { mView.getNoFollow().setVisibility(View.VISIBLE); rv.setVisibility(View.GONE); return; } mView.getNoFollow().setVisibility(View.GONE); rv.setVisibility(View.VISIBLE); myFollowItemAdapter = new MyFollowItemAdapter(mView.getActivity(), mDataList); GridLayoutManager gridLayoutManager = new GridLayoutManager(mView.getActivity(), 3); gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return (myFollowItemAdapter.isHeaderView(position) || myFollowItemAdapter.isBottomView(position)) ? gridLayoutManager.getSpanCount() : 1; } }); rv.addItemDecoration(new MyFollowItemDecoration( SizeUtils.dp2px(mView.getActivity(), 27f), SizeUtils.dp2px(mView.getActivity(), 27f))); rv.setLayoutManager(gridLayoutManager); rv.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() { @Override public void onChildViewAttachedToWindow(@androidx.annotation.NonNull View view) { } @Override public void onChildViewDetachedFromWindow(@androidx.annotation.NonNull View view) { } }); myFollowItemAdapter.setOnItemClickListener(new RecyclerItemClickListener() { @Override public void onClickListener(int position, View view, Object object) { toNextPosition = position; Bundle bundle = new Bundle(); bundle.putString("intoPage", "MyFollowActivity"); bundle.putString("other_uid", mDataList.get(position).getUserInfo().getUser().getUid()); ((BaseActivity) mView.getActivity()).toNextActivityForResult(OthersRecordActivity.class, bundle, MyFollowModel.OTHERPAGE_BACK); } }); rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@androidx.annotation.NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); addMoreData(rv); } }); rv.setAdapter(myFollowItemAdapter); } @Override public void getFollowAll() { Logger.e("getFollowAll"); if (mDataList != null && mDataList.size() >= mTotalSize) { loadOver = true; Toast.makeText(mView.getActivity(), "没有更多了", Toast.LENGTH_SHORT).show(); return; } mModel.getFollowAll(mView.getActivity(), mPageIndex, new Callback() { @Override public void onSuccess(HttpInfo info) throws IOException { HttpResultBean> bean = info.getRetDetail(new TypeToken>>() { }.getType()); if (mDataList == null || mDataList.size() <= 0) { mDataList = bean.getData().getList(); mTotalSize = Integer.valueOf(bean.getData().getTotalSize()); mView.getFollowSuccess(); } else { mDataList.addAll(bean.getData().getList()); mView.getRootView().post(new Runnable() { @Override public void run() { myFollowItemAdapter.notifyDataSetChanged(); } }); mPageIndex++; } } @Override public void onFailure(HttpInfo info) throws IOException { } }); } @Override public void activityForResult(Intent intent, int resultCode) { } @Override public int getToNextPosition() { return toNextPosition; } @Override public void removeItemByPosition(int position) { myFollowItemAdapter.removeData(position); if (mTotalSize > 0) { mTotalSize--; } else { mView.getNoFollow().setVisibility(View.VISIBLE); } } private void addMoreData(RecyclerView rv) { //获取当前显示的View 的数据 int childCount = rv.getChildCount(); //获取最后一具 Item 对应的View View childAt = rv.getChildAt(childCount - 1); //获取当前军舰中显示的最后一个 Item 的位置 Postion int childLayoutPosition = rv.getChildLayoutPosition(childAt); //如果不是最后一个就向下滑动 if (childLayoutPosition < rv.getAdapter().getItemCount() - 2) { } else { if (loadOver) { return; } getFollowAll(); } } } class MyFollowItemDecoration extends RecyclerView.ItemDecoration { private int mRowSpacing;//行间距 private int mColumnSpacing;// 列间距 /** * @param rowSpacing 行间距 * @param columnSpacing 列间距 */ public MyFollowItemDecoration(int rowSpacing, int columnSpacing) { this.mRowSpacing = rowSpacing; this.mColumnSpacing = columnSpacing; } @Override public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { int position = parent.getChildAdapterPosition(view); outRect.bottom = mRowSpacing; outRect.right = mColumnSpacing; if (position < 3) { outRect.left = mColumnSpacing; } } }