2015-05-23 67 views
0

我有一個ListView,當一個項目被點擊時,它創建新的PlaySongAlertDialog對象並將params傳遞給它。現在在下面的代碼的問題是,只有在第一次它實際上改變artistCheckBox的文本,當我點擊解僱,然後在另一個ListView行它顯示我artistCheckBox相同的文本。 我找不到帖子,但我記得有人說我應該覆蓋onPrepareDialog,但我找不到這樣的方法AlertDialog.Builder類。對話框上的視圖不會改變,當它應該

public class PlaySongAlertDialog extends AlertDialog.Builder { 
    public PlaySongAlertDialog(final Context context, final String songName, final Intent service) { 
     super(context); 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View dialoglayout = inflater.inflate(R.layout.download_song_alert_dialog_check_box, null); 
     final CheckBox artistCheckBox = (CheckBox) dialoglayout.findViewById(R.id.artist_checkbox); 
     final CheckBox albumCheckBox = (CheckBox) dialoglayout.findViewById(R.id.album_checkbox); 
     Thread thread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try{ 
        artistCheckBox.setText("Add artist name (" + getSomethingFromTheWeb.getArtist(songName) +")"); 
       } catch(Exception e){ 
        artistCheckBox.setText("Add artist name (can't found)"); 
        artistCheckBox.setClickable(false); 
       } 

      } 
     }); 
     thread.start(); 
     try { 
      thread.join(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     setMessage("Do you want to play: " + songName); 
     setView(dialoglayout); 
} 

而且這是我如何創建新的對話框(此代碼是主要的活動)

DownloadSongAlertDialog dialog = new DownloadSongAlertDialog(this, name, serviceIntent); 
dialog.show(); 

是否有創造而不是重用的最後一個真正對話框每一次的方式,也許清理緩存或其他東西。

回答

0

thread.join();阻止UI線程等待其他線程完成。這就是爲什麼你看不到對話框更新的原因。修復你可以子類AsyncTask,並在你的AlertDialog的構造函數中啓動它。當調用onPostExecute時,請填寫View並顯示它。

相關問題