1

我搜索了这个,并尝试了很多东西,有一段时间它似乎解决了,但它不是

这是我的应用程序行为:

1. ListView 的第一个 10 项从 AsyncTask 中的 Web 服务器获取,并存储在 ArrayList 中。

2.将此ArrayList设置为Adapter

3. onScroll,如果到达最后一项,再获取10个项目,添加到ArrayList等

问题:

每个项目都有一个按钮 to Thanks ,它的初始计数取自 ArrayList 中该特定项目的数据。

让它成为10

由于这是一个操作项,因此我在适配器的getView()中有一个用于此按钮的onClickListener

onClick(){

//change the count to count+1 or change 10 to 11
}

这有效,但是当我滚动列表时,此计数设置回count (10)而不是保留count + 1 (11)。这是因为正在重新创建项目,并且用于获取计数的数据来自 ArrayList,它是旧的 1 (10)。为了完成这项工作,我需要更新服务器中的数据,将其取回并存储在 ArrayList 中并使用它来获取count + 1 (11)

有没有办法做到这一点。因为每次单击操作项时,我都无法调用服务器为我提供新数据。因为这将像重新创建 ListView 一样,丢失所有滚动项目。

谢谢你

4

2 回答 2

0

如果通过焦点您的意思是选择(通过键盘向下滚动,周围有选择矩形),那么只需使用setOnItemSelectedListener. int 参数是位置,将其与列表中的项目数进行比较,您就可以了。

如果通过焦点你的意思是可见的,那么使用setOnScrollListener,它有这个方法:

onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

Just first + visible 将显示最后一个项目,您可以将其与总数进行比较。然后用剩余的项目写更新适配器......

于 2012-11-01T11:37:44.797 回答
0

如果你想在滚动上加载更多数据,那么试试这个

首先实施OnScrollListener

并实施覆盖

@Override
    public void onScroll(AbsListView view,
            int firstVisible, int visibleCount, int totalCount) {

        boolean loadMore = firstVisible + visibleCount >= totalCount;

            if(loadMore) {
                Remainingdata=totaldata-(firstVisible + visibleCount);
                System.out.println(totaldata);
                System.out.println(visibleCount);
                System.out.println(Remainingdata);
                if(Remainingdata<visibleCount){
                    yourlist.count += Remainingdata; // or any other amount
                }else{
                    yourlist.count += visibleCount; // or any other amount
                }
                yourlist.notifyDataSetChanged();
            }
    }


    @Override
     public void onScrollStateChanged(AbsListView v, int s) { } 
于 2012-11-01T12:04:20.257 回答