Android listview在向上和向下滚动时加载动态数据并清除现有数据

时间:2015-08-31 11:34:19

标签: android listview dynamic

我正在开发一个Android应用程序,它在列表视图中显示每次搜索超过10,000条记录。我不能一次保存超过20条记录,以确保应用程序不会崩溃。在向上滚动时,我想用来自rest API的动态数据刷新列表。我无法正确识别用户的滚动方向。请帮助,如果有任何更好的方式,其他感谢手动识别滚动方向请分享。任何helo都会很有用。

2 个答案:

答案 0 :(得分:1)

请尝试使用以下代码,希望它能为您提供帮助 。您需要在主要活动类

中编写以下代码
private int m_currentPage = 1;
private boolean m_isListLoading = false;
private int m_nLastIndex;

OnScrollListener m_onScroll = new OnScrollListener()
    {
        @Override
        public void onScrollStateChanged(AbsListView p_view, int p_scrollState)
        {
        }

        @Override
        public void onScroll(AbsListView p_view, int p_firstVisibleItem, int p_visibleItemCount, int p_totalItemCount)
        {


            if (load(p_firstVisibleItem, p_visibleItemCount, p_totalItemCount))
            {

                if (m_currentPage < m_nTotalPages)
                {
                    m_isListLoading = true;
                    m_currentPage++;
                    // Call your api for next page index
                }
                // }
            }
        }
    };

protected boolean load(int firstVisibleItem, int visibleItemCount, int totalItemCount)
    {
        m_nLastIndex = firstVisibleItem;
        boolean lastItem = firstVisibleItem + visibleItemCount == totalItemCount && m_gvSalesGrid.getChildAt(visibleItemCount - 1) != null
                && m_gvSalesGrid.getChildAt(visibleItemCount - 1).getBottom() <= m_gvSalesGrid.getHeight();
        if (m_gvSalesGrid.getAdapter() == null)
            return false;
        return lastItem && !m_isListLoading;
    }

获得api响应后使m_isListLoading = false

m_listview.setSelection(m_nLastIndex);

答案 1 :(得分:0)

您可以使用RecyclerView并实施RecyclerView.OnScrollListener,如Gist

所示