0

나는 사용자 정의 대화 상자가 있고 그 아래 코드에 의해 생성되는 : 그것은 나의 활동의 OnResume RunOnUiThread에서N 초 후에

public DialogFragment CreateNewPostedMessageDialog(CardSwipeData data, 
    List<MessagesMap> messagesMap, 
    string fbProfileimageAsByteString, 
    Context context) { 
      DialogFragment newFragment = 
       new NewPostedMessageDialogFragment(data, messagesMap, 
                fbProfileimageAsByteString, 
                context); 
      return newFragment; 
     } 

를 불렀다 : 내가 원하는

ThreadPool.QueueUserWorkItem(state => { 
    // Processing stuff here    

    RunOnUiThread(() => { 
     DialogFragment dialog = CreateNewPostedMessageDialog(cardSwipeData, 
      messagesMap, bitmapByteString, this); 

     dialog.Show(FragmentManager, "PostedMessage"); 

     // ListAdapter gets updated here 

     Thread.Sleep(3000); 

     dialog.Dismiss(); 
    }); 
}); 

3 초 후에 대화 상자를 닫으려고해도 내 대화 상자가 나타나지 않지만 내 목록은 3 초 후에도 계속 업데이트됩니다. 내가 잠을 잘 못 자고 뭐하는거야? UI 스레드에

+0

[처리기] (http://developer.android.com/reference/android/os/Handler.html) postDelayed 메소드를 사용하십시오. – ania

답변

1

당신이 잘못하고있는 것은 TreadPool에 태어난 백그라운드 스레드가 아니라 UI 스레드를 자고 있다는 것입니다. 대신 다음을 시도하십시오.

ThreadPool.QueueUserWorkItem(state => { 
    // Processing stuff here    

    DialogFragment dialog; 

    RunOnUiThread(() => { 
     dialog = CreateNewPostedMessageDialog(cardSwipeData, 
      messagesMap, bitmapByteString, this); 

     dialog.Show(FragmentManager, "PostedMessage"); 
    }); 

    // ListAdapter gets updated here 
    Thread.Sleep(3000); 

    RunOnUiThread(() => dialog.Dismiss()); 
}); 
+0

고마워요! 하나 이상의 UI 스레드를 사용할 수 있다는 것을 알지 못했습니다. – Ron

2

runOnUiThread 이후 실행

Thread.Sleep(3000); 

차단 UI를 3 초 동안 스레드의 UI가 응답하고. runOnUiThread 변화 내부

Declare an Handler handler = new Handler(); 

다음으로 게시 코드 : 오타에 대한

{ 

     final DialogFragment dialog = CreateNewPostedMessageDialog(cardSwipeData, 
     messagesMap, bitmapByteString, this); 

    dialog.Show(FragmentManager, "PostedMessage"); 

    // ListAdapter gets updated here 

    handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
      dialog.Dismiss(); 
      } 
    }, 3000) ; 

}); 

체크를하면 3 초 후 대화 상자를 닫습니다 원하는 경우에 당신은 핸들러 클래스에서 P ostDelayed()을 사용할 수 있습니다

+0

해결 방법이 있습니까? – Ron