123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 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<MyFollowContract.View> implements MyFollowContract.Presenter {
- List<Object> 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;
- }
- }
- }
|