123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- 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<MyFollowContract.View> implements MyFollowContract.Presenter {
- MyFollowModel mModel;
- List<MyFollowBean> 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<HttpResultDataListBean<MyFollowBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<HttpResultDataListBean<MyFollowBean>>>() {
- }.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;
- }
- }
- }
|