Я пытаюсь загрузить некоторое количество других элементов в моем ListView, когда я прокручиваю нижнюю часть и только ADD их текущим. Он работает хорошо, но недавно я узнал, что он загружает ВСЕ объектов снова, только с большим количеством предметов. Я использую Parse.com. Я обнаружил, что Parse.com предоставляет свой собственный ParseQueryAdapter, который содержит метод getNextPageView(). Он загружает элементы перемещения, но только когда пользователь нажимает кнопку ниже. Я также пробовал метод .setSkip(someNumber)
, но он только стирает/скрывает someNumber
элементов в верхней части. Поэтому я все еще хочу использовать OnScrollListener
и действительно load-more и не загружать снова и больше.Android: Сохранение элементов ListView и загрузка/добавление
У вас есть идеи, как это сделать?
проверить свои коды:
public void updateData() {
mListView = (ListView)getView().findViewById(R.id.animal_list);
final ParseQuery<Animal> query = ParseQuery.getQuery(Animal.class);
query.setCachePolicy(CachePolicy.NETWORK_ONLY);
query.orderByAscending("animal");
query.setLimit(mListView.getCount() + 5);
query.findInBackground(new FindCallback<Animal>() {
@Override
public void done(List<Animal> animals, ParseException error) {
if(animals != null){
mAdapter.clear();
mProgressBar = (ProgressBar) getView().findViewById (R.id.loading_animals);
mProgressBar.setVisibility(View.INVISIBLE);
RelativeLayout footie = (RelativeLayout) getView().findViewById(R.id.footerview);
footie.setVisibility(View.VISIBLE);
for (int i = 0; i < animals.size(); i++) {
mAdapter.add(animals.get(i));
ArrayList<Animal> animal = new ArrayList<Animal>();
animal.add(animals.get(i));
}
}
}
}); }
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute(); }
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
mListView = (ListView) getView().findViewById(R.id.animal_list);
mEditText = (EditText) getView().findViewById(R.id.search_animal);
mAdapter = new AnimalAdapter(getActivity(), new ArrayList<Animal>());
mListView.setVisibility(View.VISIBLE);
mListView.setTextFilterEnabled(true);
mListView.setAdapter(mAdapter);
mListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
if (mListView.getCount() > 20) {
RelativeLayout footie = (RelativeLayout) getView().findViewById(R.id.footerview);
mListView.removeFooterView(footie);
}
else{
updateData();
}
}
}
}
Заранее спасибо
Большое спасибо Усама !! Он работал хорошо. Кстати, у вас есть идея, как проверить, не изменились ли объекты в ListView/Adapter? Или проверить общее количество элементов ParseQuery? Ive сделал query.count(); но он кажется очень медленным, поэтому я думаю, что он делает этот метод более одного раза или около того. И почему? Потому что мне нужно установить оператор if (mListView.getCount() == ParseQuery число объектов) -> сделать что-то – marson
Не могли бы вы отменить мой ответ в качестве принятого ответа, а затем обновить страницу, а затем повторно забрать мою страницу ответа и обновления. Я не получил 15 повторений. –
OkaY, я сделал это. Есть ли у вас какие-либо идеи ? – marson