public void UpdateData(ArrayList<HashMap<String,String>> array_list){
GridView glist = (GridView) findViewById(R.id.tipss_grid)
adapter2 =new CurrentAdapter(CurrentChanels.this,array_list);
glist.setAdapter(adapter2);
}
我将此方法称为填充gridview
中的数据。我正在显示当前正在运行的程序每隔1分钟我调用此方法刷新数据。问题是,当用户在gridview
的最后一个元素上时,并且当我刷新它时,控制移动到屏幕顶部。我不希望屏幕移动,它必须保持在刷新前的位置。有什么建议?
答案 0 :(得分:1)
这是因为您每隔一分钟就会创建一个新的适配器并将其分配给GridView。
在CurrentAdapter中实现一个新方法resetData():
public void resetData(List<HashMap<String,String>> list) {
_list.clear();
_list.addAll(list);
notifyDataSetChanged();
}
每当要刷新网格时调用resetData():
GridView glist = (GridView) findViewById(R.id.tipss_grid);
if (glist.getAdapter() == null) {
CurrentAdapter adapter2 = new CurrentAdapter(CurrentChanels.this,
array_list);
glist.setAdapter(adapter2);
} else {
CurrentAdapter adapter2 = ((CurrentAdapter)glist.getAdapter());
adapter2.resetData(array_list);
}
答案 1 :(得分:0)
在setadapter line
之后使用此行glist.setSelection(adapter2.getCount() - 1) ;
答案 2 :(得分:0)
您可以调用adapter.notifyDataSetChanged()但是如果您创建新的ArrayList,则必须设置新的适配器。如果希望notifyDataSetChanged()工作,则应更改旧ArrayList中的数据。