2011-07-21 47 views
0

我有一個簡單的佈局,使用3個按鈕。我有第一個按鈕的聽衆。它會在點擊時按預期調用。聽衆檢查幾件事情,可能會下載幾個文件,然後開始另一個活動。onClick監聽器代碼不顯示Toasts

在文件下載過程中,我想通知用戶下載正在進行。我嘗試了通常的嫌疑犯,但我看到使用ProgressBar會有很多代碼。所以我嘗試了一些更小的東西:我用Toast顯示一條消息,然後在下載期間禁用3個按鈕。這是代碼:

int version_pre = getCurrentVersion(); 

//Check files on remote server 
String URL = Data._URL + "/" + Data.OWNER + "/version"; 
if(!this.downloadFile(URL, "version")) { 
    Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show(); 
} 

int version_post = getCurrentVersion(); 
if(version_pre != version_post) { //Neu Dateien besorgen 
    Button b1 = (Button)findViewById(R.id.btn_Prospekt); 
    b1.setEnabled(false); 
    b1 = (Button)findViewById(R.id.btn_Einheitenumrechner); 
    b1.setEnabled(false); 
    b1 = (Button)findViewById(R.id.btn_Sonstiges); 
    b1.setEnabled(false); 

    Toast.makeText(this, "Aktualisierung der Dateien wird gestartet.", Toast.LENGTH_LONG).show(); 

    if(!fetchAllFiles()) { 
    Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show(); 
    } 

    b1 = (Button)findViewById(R.id.btn_Prospekt); 
    b1.setEnabled(true); 
    b1 = (Button)findViewById(R.id.btn_Einheitenumrechner); 
    b1.setEnabled(true); 
    b1 = (Button)findViewById(R.id.btn_Sonstiges); 
    b1.setEnabled(true); 
} 

return ""; 

問題是這樣的:即使在調試時,我看不到任何的GUI變更機構實際上做任何事情。禁用這些按鈕應該將它們變灰。它沒有。調用Toast.maketext()。show()應該顯示一條消息。它沒有。

我懷疑這可能是預期的行爲,因爲它涉及多種機制。是否有限制,我可以調用一個動作偵聽器來改變UI?在Listener中更改UI時,是否需要調用refresh()方法?

謝謝。

+1

所以你說上述所有的代碼都在一個按鈕onClick監聽器?關於上述代碼駐留的位置(在哪個成員和哪個線程中?),我有點不清楚。 – Idistic

+0

在啓動目標活動之前,偵聽器會調用此代碼。 – 0xCAFEBABE

回答

0

您應該將.show()添加到要呼叫Toast的行中,否則您只是在不顯示消息的情況下創建消息。

聽衆,請確保您運行UI線程上的所有GUI的變化(比麪包的消息等)(另見this post

+0

鏈接解釋了爲什麼我遇到了問題。謝謝。 – 0xCAFEBABE

0

試試這個...

Toast.makeText(activityname.this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show(); 
0

我看不到的地方在您引用了按鈕後,您實際上正在設置onClickListener。它應該是這樣的:

b1.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      {     
       Toast.makeText(mContext, mContext.getString(R.string.error), Toast.LENGTH_LONG).show(); 
       } 
      }    
     }); 

此外,您使用的是相同的對象引用B1爲不同的按鈕,所以只有最後一個生效。

+0

onClick監聽器在layout.xml中的設計期間靜態設置。 – 0xCAFEBABE

+0

通常,使用相同的引用來調用不同對象的方法不是問題。你確定它與Android? – 0xCAFEBABE