在android中的listview中动态加载更多数据

时间:2014-07-25 14:48:36

标签: android json

我正在做一个Android应用程序。我使用GSON检索数据,并在每次请求时显示10个元素。我的问题是我不知道如何将新元素添加到列表底部之前的元素中。我使用onScroll,所以当我到达列表的末尾有10个元素时,我在服务器上发出请求。 我正在尝试从github集成一些库,但它不起作用。 这是我的代码: 首先是填充主列表的方法:

  public void popullateMainList(final String url,final long expirationTime) {
    //requestData(MAIN_LIST_URL);


    new AsyncTask<Void, Void, Void>() {

     ProgressBar  pb = (ProgressBar)findViewById(R.id.progressBar);

        @Override
        protected void onPreExecute() {
                pb.setVisibility(View.VISIBLE);
                  }

        @Override
        protected Void doInBackground(Void... voids) {
            try {

            elements = new Elements(url, expirationTime);

            } catch (Exception e) {
                e.printStackTrace();
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(final Void result) {

            pb.setVisibility(View.GONE);

            updateDisplay();
            mainElementAdapter.notifyDataSetChanged();
        }
    }.execute();
}

方法updateDisplay具有以下代码:

protected void updateDisplay() {
    eList = (ListView) findViewById(R.id.mainView);
    mainElementAdapter = new ElementListAdapter(this, elements.getElements());

  //  mainElementAdapter.add(elements.getElements());

    footerView = ((LayoutInflater)     this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.loading_footer, null, false);
    eList.addFooterView(footerView);
    eList.setAdapter(mainElementAdapter);
    eList.removeFooterView(footerView);
    eList.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState == SCROLL_STATE_IDLE) {
                if (eList.getLastVisiblePosition() >= eList.getCount() - visibleThreshold) {
                    currentPage++;
                    actualUrl = Constants.MAIN_LIST_URL + "?pageNumber=" + currentPage;
                    popullateMainList(actualUrl,1);

                }

            }}
        public boolean canChildScrollUp() {
            //your condition to check scrollview reached at top while scrolling
            if (swipeLayout.getScrollY() == 0.0)
                return true;
            else
                return false;
        }
        @Override
        public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount)
            {
            if (firstVisibleItem == 0)
                swipeLayout.setEnabled(true);
            else
                swipeLayout.setEnabled(false);
        }
    });
}

我希望有人帮助我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

尝试保存旧版。

使用时

elements = new Elements(url, expirationTime);

您覆盖Elements对象以及使用时

mainElementAdapter = new ElementListAdapter(this, elements.getElements());

您覆盖适配器中的旧数据

在您的班级Elemets

中添加了新方法

类似的东西

if(elements == null) {
    elements = new Elements(url, expirationTime);
} else {
    elements.add(new Elements(url, expirationTime).getElements());
}