ПОЧЕМУ МНЕ НЕ ПОМОГАЕТ ??? мне действительно нужна твоя помощь
В моем приложении я хочу использовать функции PullToRefresh и Ленивый загрузчик, и для этого я пишу ниже коды и работаю со мной.
Но у меня есть одна проблема, когда PullToRefreshrecyclerView и при прокрутке recyclerView не показывают больше элементов.
Я имею в виду: при использовании pullToRefresh не работает ленивый загрузчик!
Мои коды:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Constants.listeners.add(this);
View v = inflater.inflate(R.layout.fragment_auction_current_tab, null);
ButterKnife.bind(this, v);
context = getActivity();
handler = new Handler();
list = v.findViewById(R.id.list);
prefsUtils = new PrefsUtils(getActivity());
apis = ApiClient.getClient().create(APIs.class);
swipeToRefresh = v.findViewById(R.id.swipeToRefresh);
jwtToken = Constants.settings.getString("jwt_token", "");
list_item = getActivity().findViewById(R.id.list_item);
linearLayoutManager = new LinearLayoutManager(context);
auctionListAdapter = new AuctionsListAdapter(context, todayModel, R.layout.list_item_auction_normal_new);
list.setLayoutManager(linearLayoutManager);
list.setHasFixedSize(true);
list.setAdapter(auctionListAdapter);
list.setOnScrollListener(new EndlessRecyclerLinearPage(linearLayoutManager) {
@Override
public void onLoadMore(final int current_page) {
miniLoader.setVisibility(View.VISIBLE);
Call<AuctionsListResponse> call = apis.getTodatAuctions(jwtToken, current_page, 10);
call.enqueue(new Callback<AuctionsListResponse>() {
@Override
public void onResponse(Call<AuctionsListResponse> call, Response<AuctionsListResponse> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
if (response.body().getRes() != null) {
if (response.body().getRes().getToday().size() > 0 && response.body().getRes().getToday() != null) {
miniLoader.setVisibility(View.GONE);
auctionListAdapter.addNewItem(response.body().getRes().getToday());
} else {
miniLoader.setVisibility(View.GONE);
}
}
}
}
}
@Override
public void onFailure(Call<AuctionsListResponse> call, Throwable t) {
}
});
}
});
getData();
swipeToRefresh.setColorSchemeResources(R.color.colorAccent);
swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getData();
}
});
return v;
}
private void getData() {
Call<AuctionsListResponse> call = apis.getTodatAuctions(jwtToken, 1, 10);
call.enqueue(new Callback<AuctionsListResponse>() {
@Override
public void onResponse(Call<AuctionsListResponse> call, Response<AuctionsListResponse> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
if (response.body().getRes() != null) {
if (response.body().getRes().getToday().size() > 0 && response.body().getRes().getToday() != null) {
todayModel.clear();
todayModel.addAll(response.body().getRes().getToday());
auctionListAdapter.notifyDataSetChanged();
itemsLoader.setVisibility(View.GONE);
if (swipeToRefresh != null) {
swipeToRefresh.setRefreshing(false);
}
}
}
}
}
}
@Override
public void onFailure(Call<AuctionsListResponse> call, Throwable t) {
}
});
}
}
Как я могу исправить эту проблему?
@pskink, извини, дорогая, но никто мне не помогает? Мне нужна помощь :(
Люди помогают, если могут, и если они заметят ваш вопрос, вам действительно не стоит плакать об этом в первой строке вопроса.
Вы можете мне объяснить, чего вы добиваетесь? Ваш вопрос сбивает с толку. Обновить с помощью SwipeRefreshLayout? А какая часть не работает? Выдает исключение? Данные не обновляются?
@YosiPramajaya, да, для использования pullToRefresh я использовал SwipeRefreshLayout, при использовании pullToRefresh получаю обновленные данные, а не проблемы с данными обновления. но при использовании pullToRefresh при прокрутке на ресайклере и получении до конца списка lazyLoader не работает! можешь мне помочь? пожалуйста
@YosiPramajaya, ты здесь мой друг? можешь мне помочь? пожалуйста
Все еще пытаюсь понять ваш вопрос. Что значит, когда вы сказали: тогда не работает lazyLoader? Вы имеете в виду, что это не работает? Когда? Когда вы прокручиваете больше, когда вы тянете, чтобы обновить, или и то, и другое? Что такое lazyLoader, вы имеете в виду вызов асинхронной модификации?
@YosiPramajaya. при использовании pull To Refresh то не работает ленивый загрузчик. Я имею в виду, когда использую pullToRefresh, когда при получении последнего элемента recyclerView не работает lazyLoad
@Hock Покажи мне свой код для AuctionsListAdapter
@YosiPramajaya. я загрузил по этой ссылке: ufile.io/lz1mr, вы можете мне помочь? пожалуйста




Думаю проблема в вашем методе getData().
Почему? Когда вы вызываете notifyDataSetChanged() со своего RecyclerView.Adapter, он сообщает вашему адаптеру, чтобы он еще раз проверил список, который у него есть, и полностью перепривязал и перерисовал все в RecyclerView. Но дело в том, что в вашем getData() вы устанавливаете только список todayModel, который является ссылкой на объект внутри вашего фрагмента.
Следовательно, вам необходимо изменить список внутри вашего адаптера, чтобы успешно выполнить notifyDataSetChanged().
На самом деле, то, что вы сделали на вашем onLoadMore(), правильно там, где вы изменяете List внутри вашего адаптера. Вы должны сделать то же самое (или подобное) на вашем getData().
Образец кода:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Constants.listeners.add(this);
View v = inflater.inflate(R.layout.fragment_auction_current_tab, null);
ButterKnife.bind(this, v);
context = getActivity();
handler = new Handler();
list = v.findViewById(R.id.list);
prefsUtils = new PrefsUtils(getActivity());
apis = ApiClient.getClient().create(APIs.class);
swipeToRefresh = v.findViewById(R.id.swipeToRefresh);
jwtToken = Constants.settings.getString("jwt_token", "");
list_item = getActivity().findViewById(R.id.list_item);
linearLayoutManager = new LinearLayoutManager(context);
auctionListAdapter = new AuctionsListAdapter(context, todayModel, R.layout.list_item_auction_normal_new);
list.setLayoutManager(linearLayoutManager);
list.setHasFixedSize(true);
list.setAdapter(auctionListAdapter);
list.setOnScrollListener(new EndlessRecyclerLinearPage(linearLayoutManager) {
@Override
public void onLoadMore(final int current_page) {
miniLoader.setVisibility(View.VISIBLE);
getData(currentPage);
}
});
getData(1);
swipeToRefresh.setColorSchemeResources(R.color.colorAccent);
swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getData(1);
}
});
return v;
}
private void getData(int page) {
Call<AuctionsListResponse> call = apis.getTodatAuctions(jwtToken, page, 10);
call.enqueue(new Callback<AuctionsListResponse>() {
@Override
public void onResponse(Call<AuctionsListResponse> call, Response<AuctionsListResponse> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
if (response.body().getRes() != null) {
if (response.body().getRes().getToday().size() > 0 && response.body().getRes().getToday() != null) {
todayModel.clear();
todayModel
.addAll(response.body()
.getRes()
.getToday());
//NOTICE THE DIFFERENCE HERE
auctionListAdapter.setModel(todayModel);
auctionListAdapter.notifyDataSetChanged();
itemsLoader.setVisibility(View.GONE);
if (swipeToRefresh != null) {
swipeToRefresh.setRefreshing(false);
}
miniLoader.setVisibility(View.GONE);
}
}
}
}
}
@Override
public void onFailure(Call<AuctionsListResponse> call, Throwable t) {
itemsLoader.setVisibility(View.GONE);
if (swipeToRefresh != null) {
swipeToRefresh.setRefreshing(false);
}
miniLoader.setVisibility(View.GONE);
}
});
}
В вашем AuctionsListAdapter добавьте этот метод. Это необходимо для настройки списка, который будет использоваться адаптером для отображения данных:
public void setModel(List<Today> todayModel) {
this.model = todayModel;
}
Можете ли вы прислать мне код с моими кодами? пожалуйста. Я любитель и очень нуждаюсь в вашей помощи. пожалуйста
ты здесь мой друг? можешь мне помочь? пожалуйста
Почему не ответил мне мой друг? : D
Вы должны знать, что у большинства из нас здесь настоящая жизнь, поэтому мы не можем 24 часа смотреть треды. Наберитесь терпения.
Можете ли вы, мой друг, помочь, но какой код для этой строки: auctionListAdapter.setModel(todayModel);, какой код добавить в адаптер для использования кода setModel?
На самом деле это просто сеттер. Посмотрите мой отредактированный ответ.
Спасибо за обновление. в onLoadMore вы используете getData();, а в этом коде: apis.getTodatAuctions(jwtToken, 1, 10); 1 - это номер страницы, но в onLoadMore следует получать данные из другие страницы. при использовании getData в onLoadMore каждый раз показывать элементы из Страница 1. как я могу это исправить?
Вы можете редактировать, чтобы стать getData(int page). И когда вы вызываете getData(), вы можете указать любую страницу в качестве параметра.
Вы можете прислать мне свой скайп-идентификатор? пожалуйста
Почему? Вы всегда можете спросить здесь, и я уверен, что есть много других профессионалов, которые вам помогут. :) А ваши вопросы могут помочь другим разработчикам учиться и учиться
Доктор Конг: вам уже сказали здесь, что вы не должны КРИЧАТЬ в отношении людей, не так ли? вы действительно думаете, что получите какой-либо ответ, если единственное изменение в вашем вопросе - смена ника?