如何在不移动的情况下刷新GridView?

时间:2013-09-27 09:23:32

标签: android arrays gridview

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

3 个答案:

答案 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中的数据。