1
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并且意味着当我刷新它时,控制移动到屏幕顶部。我不希望屏幕移动,它必须保持在刷新前的位置。有什么建议么?

4

3 回答 3

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);
}
于 2013-09-27T09:47:16.063 回答
0

在 setadapter 行之后使用此行

glist.setSelection(adapter2.getCount() - 1) ;
于 2013-09-27T09:31:08.353 回答
0

您可以调用 adapter.notifyDataSetChanged() 但如果您创建新的 ArrayList 您必须设置新的适配器。如果您想要 notifyDataSetChanged() 工作,您应该更改旧 ArrayList 中的数据。

于 2013-09-27T09:49:03.230 回答