如何在使适配器数据无效时无休止地调用getView?

时间:2014-07-04 16:57:08

标签: java android listview android-listview

我想使用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);
}

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

每次调用getOffersFromServer时,它都会重新加载你的适配器,所以它也会重新加载eview ...

但是这种方法对我来说似乎没有问题,你必须始终保持连接打开,这是非常糟糕的,最好在显示任何内容之前下载所有或至少一大块数据,你会通过不断的连接网络呼叫避免大量的网络开销和电池浪费。