2013-09-27 35 views
0
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的最后一个元素上,并且意味着当我刷新它时,控件移动到屏幕顶部。我不希望屏幕移动,它必须保持在刷新之前的位置。有什么建议么?如何刷新GridView而不移动它?

+0

使用'adapter2.notifyDataSetChanged()' – Raghunandan

+0

如果我不在后面调用setadapter,它就无法工作。调用setadapter将屏幕移动到顶部。 –

+0

你是什么意思是由用户在最后一个元素?你的意思是他滚动到最后的元素(没有实际选择任何网格项)? –

回答

1

这是因为每隔一分钟你正在创建一个新的适配器,并将其分配到GridView后。只要你想刷新电网

public void resetData(List<HashMap<String,String>> list) { 
    _list.clear(); 
    _list.addAll(list); 
    notifyDataSetChanged(); 
} 

呼叫resetData():

在CurrentAdapter实现新的方法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); 
} 
+0

非常感谢@Sunil Manheri –

0

使用此行setadapter线

glist.setSelection(adapter2.getCount() - 1) ; 
+1

我在GridView中有40个元素。用户可以在任何位置。我刚刚举了最后一个元素的例子。如果用户在第20位,那么呢? –

0

你可以叫adapter.notifyDataSetChanged(),但如果你创建新的ArrayList你必须设置新的适配器。如果要使用notifyDataSetChanged(),则应该更改旧ArrayList中的数据。