1

나는 GridView의 일부가 될 asynchronously 이미지를 다운로드 중입니다. 그리고 내가 지금 runOnUiThread();이 어댑터에 데이터 세트를 올바르게 알리는 방법이 변경 되었습니까?

notifyDataSetChanged();를 호출합니다 onCreate()GridView를 업데이트, 내 질문은 :이 할 수있는 더 좋은 방법이

있습니까? Thread을 2 초 동안 잠자기 상태로 설정하여 어댑터의 데이터가 변경되는 시간에 이미지가 표시되도록합니다. 그러나 물론,이 조건을 하드 코딩하고 있습니다 (2 초 이상 소요될 수 있음). 인터넷 연결로 인해 GridView이 올바르게 업데이트되지 않을 수 있습니다. 여기

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

}; 
대단히 감사의 Thread입니다!

+0

ui 스레드 이외의 스레드에서 ui를 업데이트 할 수 없습니다. updateData의 기능은 무엇입니까? – Raghunandan

+0

음, 그것은 UI 스레드입니다. 'UpdateData()'는 어댑터의 데이터를 설정하고'notifyDataSetChanged()'를 호출합니다. –

답변

2

AsyncTask 클래스를 사용할 수 있습니다. 세 가지 중요한 추상적 기능이 있습니다. doInBackground onPostExecute onPreExecute

당신은 인터넷에서 이것에 대해 검색 할 수 있으며,이 link을 확인할 수 있습니다.

+1

맞습니다. AsyncTask를 사용하고 있지만, 나는 onPostExecute를 전혀 잊었다. 그것은'Thread'보다 훨씬 낫습니다. 감사! –