2013-09-27 36 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中的數據。