3

我有一个数据库,并且正在将数据从该数据库加载到列表视图中。在用户将列表视图滚动到最后以从数据库中获取另外 20 个项目并添加到列表视图后,我写从数据库中获取 20 个项目,但是在加载到列表视图时加载一个或两个项目时出现问题;我在列表视图中看不到任何数据。我的代码是:

private ListviewAdapter adapter;
list.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) {
        if (totalItemCount > 0)
        {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if(lastInScreen == totalItemCount)
            {
                Parcelable state = list.onSaveInstanceState();

                //Fill my_array
                adapter = new ListviewAdapter(MainActivity.this, my_array);
                list.setAdapter(adapter);
                list.onRestoreInstanceState(state);
            }
        }
    }
});

当加载的数据大于屏幕时,它可以正常工作,但是当加载的数据小于屏幕时,我在列表视图中看不到任何内容。

我该如何解决这个问题?

4

1 回答 1

3

只需将适配器作为类变量并设置适配器onCreate(..) ,当您到达 ListView 的末尾并更新列表视图时,只需清除my_array.clear();然后向其中添加数据并通知 Listview 适配器。

示例代码:

Class myclass extends Activity
{
 private ListviewAdapter adapter;
 private ArrayList<String> my_array;

 onCreate(...)
  {
   //Fill Values in the Array
   my_array.add(...);
   adapter = new ListviewAdapter(MainActivity.this, my_array);
   list.setAdapter(adapter);
   ....

   //In your onScrollListener() of the list make the following changes
   list.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView arg0, int arg1) {

    }
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) {
        if (totalItemCount > 0)
        {
            int lastInScreen = firstVisibleItem + visibleItemCount;
            if(lastInScreen == totalItemCount)
            {
                my_array.clear();
                //Add the values in you Array here.
                my_array.add(....)
                //Notify the adapter about the data set change.
                adapter.notifyDatasetChanged();
            }
        }
    }
});

编辑
对于列表视图中未检测到的按钮点击问题。
只需在自定义列表视图的布局文件中设置 onClick 属性。

<Button
        ......
        android:onClick="btnRemoveClick"
        />

并在您的 onClick 方法中,执行点击事件。

public void btnRemoveClick(View v)
{
    //get the position of the button here
    final int position = listviewItem.getPositionForView((View) v.getParent()); 
}

PS:需要将ListView对象设置为类变量。

于 2013-07-20T14:23:43.277 回答