我的代码:
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数据绑定到Adapter。它可以更新数据。
但ListView会自动粘贴。棒是当我将LIstView滑动到底部时,ListView再次绑定数据并显示在ListView的顶部。
如何解决问题?我怎么能控制ListView?
答案 0 :(得分:0)
不要重复创建listview和适配器。如果您重复创建listview和适配器,显示列表将是一个新列表,它将显示列表视图的顶部而不是当前位置。因此,创建列表和适配器一次,当您想要将新项目绑定到列表时,只需更新适配器的数据并调用如下所示。
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;
}
}
}
我认为这会对你有帮助。