每次重新获得数据后,就setAdapter(),这样,列表就回到了顶端,用户体验极差,理想状态是,列表位置不动,只更新数据。解决方案是利用Adapter的notifyDataSetChanged,通知Adapter数据已经更改,然后Adapter会调用getView()方法,重新显示界面。
注意的一点是如果Adapter是自定义的,那么数据要是全局的或者是在自定义Adapter中不能是私有的,因为要重新设置数据,
public
class
HistoryListViewAdapter
extends
BaseAdapter {
private
List<QueryRecord> mItemList;
private
LayoutInflater mInflater;
private
Context mContext;
public
HistoryListViewAdapter(Context c,List<QueryRecord> itemList) {
mItemList = itemList;
mContext = c;
mInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public
void
setItemList(List list) {
mItemList = list;
}
@Override
public
int
getCount() {
//
}
@Override
public
Object getItem(
int
position) {
//
}
@Override
public
long
getItemId(
int
position) {
//
}
public
void
removeItem(
int
position) {
//
}
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
//
}
}
|
再在数据重新获取后
1
2
|
listitemAdapter.setItemList(list);
//重新设置数据
listitemAdapter.notifyDataSetChanged();
|
这样数据重新刷新,界面刷新。