【发布时间】:2014-08-25 23:43:44
【问题描述】:
您好,我不确定是否要实施此特定场景,我需要一些建议。我有一个列表视图,我将通过调用服务器来更新它,如果它是少量数据,它会很快,如果我有大约 5000 条记录怎么办?我需要将它们加载到内存或数据库中,然后查询并更新列表视图吗?对此的最佳做法是什么?
假设当我下载数据时突然出现网络中断?那么我将如何处理数据并更新列表视图?
【问题讨论】:
标签: android listview network-connection
您好,我不确定是否要实施此特定场景,我需要一些建议。我有一个列表视图,我将通过调用服务器来更新它,如果它是少量数据,它会很快,如果我有大约 5000 条记录怎么办?我需要将它们加载到内存或数据库中,然后查询并更新列表视图吗?对此的最佳做法是什么?
假设当我下载数据时突然出现网络中断?那么我将如何处理数据并更新列表视图?
【问题讨论】:
标签: android listview network-connection
如果你有 5000 条记录,你不应该获取所有记录,你必须限制服务器上的查询,这样你就不会发送所有记录。
然后您可以实现“显示更多或无尽”,以便在需要时从服务器获取更多数据。
【讨论】:
我不确定是否有 5K 条记录,但众所周知 ListViews 可以很好地处理大量记录 使用有效的回收机制。详细解释见this thread。
现在,帮自己一个忙,使用Volley 加载网络资源。它做得更好
在将记录异步加载到列表中的过程中,比我们大多数人...在任何情况下,您使用的库或您自己的代码都必须从后台线程执行资源加载/网络连接。
您还应该将ViewHolder pattern 应用于您的代码。使用 ViewHolder
始终是一个引擎盖的想法。对于大量记录而言,它变得至关重要。请使用它。
它应该看起来像这样
class ViewHolder {
textView text1;
Button button1;
}
class MyAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView==null){
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId, parent, false);
viewHolder = new ViewHolderItem();
viewHolder.text1 = (TextView) convertView.findViewById(R.id.text1);
viewHolder.button1 = (Button) convertView.findViewById(R.id.button1);
..........
convertView.setTag(viewHolder);
}
viewHolder = (ViewHolderItem) convertView.getTag();
ObjectItem objectItem = data[position];
..........
}
}
最后,如果您确实需要部分加载以及 Load more 功能,请阅读:
http://www.androidhive.info/2012/03/android-listview-with-load-more-button/
【讨论】: