gpt4 book ai didi

java - 滑动刷新后加载更多不起作用

转载 作者:行者123 更新时间:2023-11-30 12:04:10 32 4
gpt4 key购买 nike

我有一个小问题,我让滑动刷新并加载更多。但如果我滑动刷新,加载更多不起作用。数据只显示第一页,之后的下一页不出来,加载更多也不起作用。

我调用了 clearData、setListeners 和 requestDataFromServer 函数,

那错在哪里呢?

package com.dekikurnia.appcelebrity.profile_list;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.dekikurnia.appcelebrity.R;
import com.dekikurnia.appcelebrity.adapters.ProfileAdapter;
import com.dekikurnia.appcelebrity.models.Profile;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;
import java.util.List;

public class ProfileListFragment extends Fragment implements ProfileListContract.View {

@BindView(R.id.rvProfile)
RecyclerView rvProfile;
@BindView(R.id.progressBarProfile)
ProgressBar pbLoading;
@BindView(R.id.fab_scroll)
FloatingActionButton fabScroll;
@BindView(R.id.swipe_refresh)
SwipeRefreshLayout swipeRefresh;
ProfileAdapter adapter;
LinearLayoutManager linearLayoutManager;
private ProfileListPresenter profileListPresenter;
private List<Profile> profileList = new ArrayList<>();

private String TAG = "ProfileFragment";

private int pageNo = 1;
private int previousTotal = 0;
private boolean loading = true;
private int totalPages = 3;
int firstVisibleItem, visibleItemCount, totalItemCount;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getActivity().setTitle("Ruang Casting");
View view = inflater.inflate(R.layout.fragment_profile, container, false);
ButterKnife.bind(this, view);

setView();
setListeners();
profileListPresenter = new ProfileListPresenter(this);
profileListPresenter.requestDataFromServer();

fabScroll.setOnClickListener(v -> rvProfile.smoothScrollToPosition(0));

swipeRefresh.setColorSchemeColors(Color.BLUE, Color.GREEN);
swipeRefresh.setOnRefreshListener(() -> {
clearData();
setListeners();
profileListPresenter.requestDataFromServer();
});
return view;
}

@SuppressLint("WrongConstant")
private void setView(){
adapter = new ProfileAdapter(getContext(), profileList);
linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
rvProfile.setLayoutManager(linearLayoutManager);
rvProfile.setItemAnimator(new DefaultItemAnimator());
rvProfile.setAdapter(adapter);
}

private void setListeners() {
rvProfile.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
visibleItemCount = rvProfile.getChildCount();
totalItemCount = linearLayoutManager.getItemCount();
firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (visibleItemCount + firstVisibleItem) >= totalItemCount
&& firstVisibleItem >= 0
&& totalItemCount >= totalPages) {
profileListPresenter.getMoreData(pageNo);
loading = true;
}

if (dy > 0 && fabScroll.getVisibility() == View.VISIBLE) {
fabScroll.hide();
} else if (dy < 0 && fabScroll.getVisibility() != View.VISIBLE) {
fabScroll.show();
}
}
});
}

@Override
public void showProgress() {
swipeRefresh.setRefreshing(true);
}

@Override
public void hideProgress() {
swipeRefresh.setRefreshing(false);
}

@Override
public void setDataToRecyclerView(List<Profile> profileArrayList) {
profileList.addAll(profileArrayList);
adapter.notifyDataSetChanged();
pageNo++;
}

@Override
public void onResponseFailure(Throwable throwable) {
Log.e(TAG, throwable.getMessage());
Toast.makeText(getContext(),"Error fetching Profile",Toast.LENGTH_SHORT).show();
}

@Override
public void clearData() {
int size = profileList.size();
profileList.clear();
adapter.notifyItemRangeRemoved(0, size);
}

@Override
public void onDestroy() {
super.onDestroy();
profileListPresenter.onDestroy();
}
}

最佳答案

在以下代码段的 setListeners() 方法中:

visibleItemCount = rvProfile.getChildCount();
totalItemCount = linearLayoutManager.getItemCount();
firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (visibleItemCount + firstVisibleItem) >= totalItemCount
&& firstVisibleItem >= 0
&& totalItemCount >= totalPages) {
profileListPresenter.getMoreData(pageNo);
loading = true;
}

您正在检查 if (!loading && (visibleItemCount + firstVisibleItem) >= totalItemCount)

当您第一次加载更多时,条件是正确的,但在您滑动刷新后,这些值需要设置回 0,以便验证 if 语句并且 getMoreData(pageNo) 可以再次调用

创建一个名为 resetData() 的方法,它将这些值重置回 0 并与其他方法一起调用它:

swipeRefresh.setOnRefreshListener(() -> {
clearData();
setListeners();
profileListPresenter.requestDataFromServer();
});

希望这对您有所帮助!

关于java - 滑动刷新后加载更多不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268175/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com