1

Я asynchronously Загрузка изображений, которые будут частью GridView. И обновлять GridView внутри onCreate(), я называю notifyDataSetChanged(); на runOnUiThread();Как правильно уведомить об этом адаптер, его набор данных изменился?

Теперь мой вопрос:

Есть ли лучший способ сделать это? Я устанавливаю Thread на спящий режим в течение 2 секунд, чтобы гарантировать, что изображения будут там, когда данные в адаптере будут изменены. Но, конечно, я жестко кодирую это условие (может занять более 2 секунд), и подключение к Интернету может привести к сбою в правильном обновлении GridView.

Вот Thread,

private Runnable myRunnable = new Runnable(){ 

@Override 
public void run() { 
    try { 
     Thread.sleep(2000); 
     updateData(); // contains notifyDataSetChanged() 
     if(images[0] == null){ 
     Toast.makeText(getApplicationContext(), 
"Your Internet Connection is not working properly", Toast.LENGTH_SHORT).show();     
     } 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 

}; 

Большое спасибо!

+0

Вы не можете обновить ui из потока, отличного от нити ui. Что делает updateData? – Raghunandan

+0

Ну, это нить ui. 'UpdateData()' устанавливает данные из адаптера и вызывает 'notifyDataSetChanged()' –

ответ

2

Вы можете использовать класс AsyncTask. Он имеет три важные абстрактные функции. doInBackground onPostExecute onPreExecute

Вы можете найти об этом в Интернете, а также можете проверить это link.

+1

Вы правы. Несмотря на то, что я использую 'AsyncTask', я полностью забыл о' onPostExecute'. Это намного лучше, чем «Thread». Благодаря! –

Смежные вопросы