0

我有一個自定義對話框,它是由下面的代碼創建:駁回從RunOnUiThread一個自定義對話框後N秒

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

它從我的活動的的onResume RunOnUiThread叫:

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秒後仍然更新。任何我做錯了睡眠?

+0

使用[處理器](http://developer.android.com/reference/android/os/Handler.html)postDelayed此方法。 – ania

回答

1

你在做什麼錯了,你正在睡覺的UI線程,而不是你在TreadPool產生的後臺線程。試着用這個代替:

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運行在UI線程

Thread.Sleep(3000); 

塊三秒鐘UI線程,使得UI響應。如果你想在三秒鐘後關閉對話框,你可以用p ostDelayed()從Handler類:

Declare an Handler handler = new Handler(); 

屆時,runOnUiThread變化裏面你發佈的代碼:

{ 

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

}); 

檢查錯字

+0

有沒有解決這個問題的方法? – Ron