更新ListView的项目以完成某些操作

时间:2012-11-01 11:27:20

标签: android listview

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

这是我的申请行为:

1。 ListView,其中包含从AsyncTask中的Web服务器获取的前10个项目,并存储在ArrayList中。

2。将此ArrayList设置为适配器

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

问题:

要感谢的每个项目都有一个按钮,它具有从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,丢失所有滚动的项目。

谢谢

2 个答案:

答案 0 :(得分:0)

如果通过聚焦意味着选择(通过键盘向下滚动,周围有选择矩形),那么只需使用setOnItemSelectedListener。 int参数是位置,将其与列表中的项目数进行比较,然后你就是黄金。

如果通过聚焦意味着可见,则使用具有此方法的setOnScrollListener

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

只有第一个+可见才会显示最后一个项目,您可以将其与总数进行比较。然后用剩余的项目写更新适配器......

答案 1 :(得分: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) { }