package com.edufound.reader.presenter; import android.content.Intent; import android.graphics.Rect; 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.BasePresenter; import com.edufound.reader.contract.MyFollowContract; import com.edufound.reader.listener.RecyclerItemClickListener; import com.edufound.reader.util.SizeUtils; import com.orhanobut.logger.Logger; import java.util.ArrayList; import java.util.List; 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 { List mDataList; MyFollowItemAdapter myFollowItemAdapter; public MyFollowPresenter() { mDataList = new ArrayList<>(); for (int i = 0; i < 30; i++) { mDataList.add("i=" + i); } } @Override public void initRecyclerView(RecyclerView rv) { // 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) { addMoreData(rv); } @Override public void onChildViewDetachedFromWindow(@androidx.annotation.NonNull View view) { } }); myFollowItemAdapter.setOnItemClickListener(new RecyclerItemClickListener() { @Override public void onClickListener(int position, View view) { Toast.makeText(mView.getActivity(), "click:" + position, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(mView.getActivity(), OthersRecordActivity.class); intent.putExtra("userId", position); mView.getActivity().startActivity(intent); } }); rv.setAdapter(myFollowItemAdapter); } public 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 { Logger.e("倒数第二个,添加数据"); mDataList.addAll(mDataList); myFollowItemAdapter.addMored(mDataList); rv.post(new Runnable() { @Override public void run() { myFollowItemAdapter.notifyDataSetChanged(); } }); } } } 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; } } }