0

我的代码:

adapter = new SimpleAdapter(this.Context, Arraylist, R.layout.activity_lxxx_show, 
new String[]
{
"_id", "line_id", "sort_order", "station_name", "status", 
"Top_colour", "Bottom_colour", "Left_colour", "Right_colour"
}, 
new int[]
{
R.id._id, R.id.tv_line_id, R.id.tv_sort_order, R.id.tv_station_name, R.id.tv_status, 
R.id.imageView_Top, R.id.imageView_Bottom, R.id.imageView_Left, R.id.imageView_Right
});
lv = (ListView) this.Context.findViewById(R.id.listView_lxxx);
lv.setAdapter(adapter); //display data in ListView

adapter.notifyDataSetChanged();

我需要在一段时间内重复调用此代码。我想将不同的 Arraylist 数据绑定到适配器。目前可以更新数据。

但 ListView 坚持自动。坚持的是,当我将 LIstView 滑到底部时,ListView 再次绑定数据并显示在 ListView 的顶部。

如何解决问题?我如何控制 ListView?

4

1 回答 1

0

不要重复创建列表视图和适配器。如果您重复创建列表视图和适配器,显示列表将是一个新列表,它将显示列表视图的顶部而不是当前位置。因此,创建列表和适配器一次,当您想将新项目绑定到列表时,只需更新适配器的数据并调用如下。

 adapter.notifyDataSetChanged();

请检查我在下面发布的示例。

public class GrowingListViewActivity extends ListActivity implements OnScrollListener  {
Aleph0 adapter = new Aleph0();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(adapter);
    getListView().setOnScrollListener(this);
}

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

    boolean loadMore = /* maybe add a padding */
    firstVisible + visibleCount >= totalCount;

    if (loadMore) {
        adapter.count += visibleCount; // or any other amount
        adapter.notifyDataSetChanged();
    }
}

public void onScrollStateChanged(AbsListView v, int s) {
}

class Aleph0 extends BaseAdapter {

    int count = 40; /* starting amount */

    public int getCount() {
        return count;
    }

    public Object getItem(int pos) {
        return pos;
    }

    public long getItemId(int pos) {
        return pos;
    }

    public View getView(int pos, View v, ViewGroup p) {
        TextView view = new TextView(GrowingListViewActivity.this);
        view.setText("entry View : " + pos);
        return view;
    }
}
}

我想这会对你有所帮助。

于 2013-01-11T05:27:14.623 回答