如何在Android ListView中显示无限的数据列表

时间:2014-05-14 06:00:39

标签: android android-listview android-asynctask lazy-loading

如果这个问题已经得到解答,我真的很抱歉。 对于我所面临的问题,我没有找到任何合适的解决方案。

我有大量的数据。

我希望在List中显示,此数据包含图像,网址,标题,类型和价格

项目列表可以超过10,000

因此,如果我要实现Lazy Loading,我需要所有网址和其他数据,以便我可以在运行时加载图像。

但是如何加载包含网址,标题,类型和价目表的数据?

或者我可以通过延迟加载首先加载20条记录。如果是,那么如何?

请建议您是否有更好的方法来完成这项工作。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以首先加载20条记录,在滚动ListView时可以使用ScrollListenerListView加载更多记录。 check this answer

答案 1 :(得分:1)

我是如何做到这一点的是我使用AsyncTask在ArrayList中加载数据(假设为20项)然后我使用setAdapter将它们设置为listview,并在ListAdapter的getView方法中将它们设置为第二个最后一项i 再次执行AsyncTask,但这次使用的不是setAdapter,我使用的是adapter.notifyDataSetChanged(); 应该是这样的: getView方法应该是这样的:

public View getView(int arg0, View arg1, ViewGroup arg2) 
{
    //your data inflater or set text...
    if(arg0==yourList.size()-1)
       {
           new YourAsyncTask().execute());
       }
}

AsyncTask应该是这样的

//first initialize your list out of asynctask 
ArrayList<String> yourList=new ArrayList<String>();

class YourAsyncTask extends AsyncTask(Void,Void,Void)
 {
     protected Void doInBackground(String ... arg0) {
        // TODO Auto-generated method stub
            //get your data and add to arraylist
             yourlist.add(data);
      }

    protected void onPostExecute(Void result) {
             if(yourlist.size<20){
                   listview.setAdapter(yourAdapter);
                }
              else
                 {
                    yourAdapter.notifyDataSetChanged();
                 }
      }
}       

答案 2 :(得分:0)

它完全取决于你如何构建app.One方法我会设法向服务器发出一个请求,它将以json格式返回你的urls,titles数据。

{
    "dummy_info": "blah blah blah",
    "data": [
        {
            "url": "http://www.google.com",
            "title": "Sample",
            "type": "Education",
            "price": "50$"
        },
        {
            "url": "http://www.google.com",
            "title": "Sample",
            "type": "Education",
            "price": "50$"
        }
    ]
}

获得特定数据后,您可以使用Android SwipeRefreshLayout或Lazy List加载实现来批量获取数据。