Ricky Watson
Ricky Watson

Reputation: 143

How to refresh GridView without moving it?

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);

}

I call this method to populate data in gridview. I m displaying currently running programs. After every 1 min I call this method to refresh the data. The problem is that when user is on the last element of gridview and mean while I refresh it then control move to top of the screen. I do not want the screen to move,it must stay where it is before refresh. Any suggestions?

Upvotes: 1

Views: 616

Answers (3)

Mathew1990
Mathew1990

Reputation: 327

You can call adapter.notifyDataSetChanged() but if you creating new ArrayList you have to set new adapter. You should change data in old ArrayList if you want notifyDataSetChanged() work.

Upvotes: 0

Sunil Manheri
Sunil Manheri

Reputation: 2363

This is because every one minute you are creating a new Adapter and assigning it to the GridView.

Implement a new method resetData() in CurrentAdapter:

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

Call resetData() whenever you want to refresh the grid:

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);
}

Upvotes: 1

NARESH REDDY
NARESH REDDY

Reputation: 682

use this line after setadapter line

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

Upvotes: 0

Related Questions