我想使用Android ListView实现从服务器加载的延迟项目。
对于那个建议,我在我的适配器中添加了下一个代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (position != 0 && position % 7 == 0)
// ask next page
{
mOffersListActivity.getOffersFromServer(ListType.FULL, 10, 10);
}
这将调用托管活动,该活动从服务器加载下一个批量:
@SuppressWarnings("unchecked")
private void afterServerOfferResponse(final Gson gson,
String result) {
boolean hadError = false;
Type collectionType = new TypeToken<ArrayList<Offer>>() {
}.getType();
if (mOffersList == null) {
mOffersList = new ArrayList<Offer>();
}
mOffersList.addAll((Collection<? extends Offer>) gson
.fromJson(result, collectionType));
if (mOffersList == null || mOffersList.size() == 0) {
errorMsg.setText("no offers found");
hadError = true;
} else {
if (mAdapter == null) {
mAdapter = new ImageAdapter(
OffersListActivity.this, mOffersList,
listType);
mListView.setAdapter(mAdapter);
}
// mAdapter.notifyDataSetChanged();
mListView.invalidate();
}
问题是位置7,14等的getView被无限调用
我该如何避免这种情况?
我原以为这是adpater而不是%7 code
:
if (mOffersList.size() - 3 == position)
// ask next page
{
mOffersListActivity.getOffersFromServer(ListType.FULL, 10, 10);
}
还有其他想法吗?
答案 0 :(得分:0)
每次调用getOffersFromServer时,它都会重新加载你的适配器,所以它也会重新加载eview ...
但是这种方法对我来说似乎没有问题,你必须始终保持连接打开,这是非常糟糕的,最好在显示任何内容之前下载所有或至少一大块数据,你会通过不断的连接网络呼叫避免大量的网络开销和电池浪费。