简体   繁体   English

Android:保存ListView项目并加载/添加更多内容

[英]Android: Saving ListView items and load/add more

I'm trying to load some number of more items in my ListView when I scroll to the bottom and just ADD them to the current ones. 当我滚动到底部并将它们添加到当前项时,我试图在ListView中加载更多数量的项。 It works well, but recently I found out that it loads ALL objects again, only with more items. 它运作良好,但最近我发现它再次加载所有对象,但只包含更多项。 I'm using Parse.com. 我正在使用Parse.com。 I discovered, that Parse.com provides their own custom ParseQueryAdapter, which contains getNextPageView() method. 我发现,Parse.com提供了自己的自定义ParseQueryAdapter,其中包含getNextPageView()方法。 It loads move items, but only when the user clicks on the button below. 它加载移动项目,但仅当用户单击下面的按钮时才加载。 I also tried .setSkip(someNumber) method but it only erases/hides someNumber of items in the top. 我也尝试了.setSkip(someNumber)方法,但是它只擦除/隐藏顶部的someNumber项。 So I still want to use OnScrollListener and really load-more and not load-again+more. 因此,我仍然想使用OnScrollListener并真正加载更多而不是再次加载更多。

Do you have any idea, how to do it? 你有什么想法,怎么做?

check my codes: 检查我的代码:

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();
                                }

                            }

                        }

                    }

Thanks in advance 提前致谢

Try to clear Adapter before setting it to ListView like as follows: 尝试清除Adapter然后将其设置为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);
                    mAdapter.clear();///////HERE

            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();
                                }

                            }

                        }

                    }

You are only adding items without wiping previous data. 您仅添加项目而不清除先前的数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM