2012-02-10 108 views
-1

我似乎無知,但我還沒有找到關於如何去開發我的BlackBerry應用程序的問題的很多信息。如何刷新按鈕點擊黑莓ui頁面?

基本上我構建了一個包含幾個圖像按鈕的用戶界面。我想要做的是,當我點擊其中一個按鈕時,我希望屏幕中央的圖像能夠無縫切換到另一個圖像。

我目前沒有使用任何線程,雖然從我收集的東西我需要?

或者我只需在我的按鈕監聽器中推入一個新屏幕並調用該類的構造函數並使用不同的圖像重建頁面?

對不起,如果不清楚,我會很感激一些關於如何做到這一點的基本信息,或者是一個解釋黑莓詳細頁面刷新的鏈接!

非常感謝

編輯:好的這裏是我的代碼非常小的一部分:

這基本上是我在聽衆嘗試的最後一件事,我不知道如何改變形象(flagField )當我按下兩個按鈕之一!唯一對我有用的是pushScreen(新的Csps(「americanflag」));每次我按一個按鈕,但表現很糟糕,我留下了一堆屏幕,並不理想。

我一直在嘗試這一切一天做長嘿嘿......嘆了口氣,這裏有雲:

public class CSP extends UiApplication 
{ 
public static void main(String[] args) 
{ 
    CSP theApp = new CSP(); 
    theApp.enterEventDispatcher(); 
} 

public CSP() 
{ 
    CSPS csps = new CSPS(); 
    pushScreen(csps); 
} 
} 

class CSPS extends MainScreen implements FieldChangeListener 
{ 

int width = Display.getWidth(); 
int height = Display.getHeight(); 

ButtonField backButton; 

ImageButtonField canadianFlag; 
ImageButtonField americanFlag; 
Bitmap changeableFlag; 
String currentFlag ="canada_flag.png"; 
BitmapField flagField; 

canadianFlag = construct("canada_flag.png", 0.18); 
americanFlag = construct("us.gif", 0.18); 

    canadianFlag.setChangeListener(this); 
    americanFlag.setChangeListener(this); 

    add(flagField); 
    add(canadianFlag); 
    add(americanFlag); 
//LISTENERS 
public void fieldChanged(Field field, int context){ 


    if(field == canadianFlag){ 
     setCurrentFlagResource("canada_flag.png"); 
     BitmapField newFlagField = populateFlagField(currentFlag, 0.3); 
     replace(flagField, newFlagField); 

     this.invalidate(); 
     this.doPaint(); 
     this.updateDisplay(); 

    } 
    else if(field == americanFlag){ 

     setCurrentFlagResource("american-flag.gif"); 
     BitmapField newFlagField = populateFlagField(currentFlag, 0.3); 
     replace(flagField, newFlagField); 

     this.invalidate(); 
     this.doPaint(); 
     this.updateDisplay(); 

    } 

的setCurrentFlagRessource方法將flagField屬性到合適的BitmapField

+1

也許是我的,但有太多的方法調用,我不知道他們怎麼做才能說出什麼可能是錯的。 – Richard 2012-02-10 23:01:51

回答

2

有一個在BitmapField稱爲setBitmap()方法。

在聽衆中,您應該簡單地致電flagField.setBitmap(newbitmap)。您也可以使用方法setImage()。有沒有需要調用invalidate(),updateUI等

如果你得到任何IllegalStateException在使用這種方法,只需拿到一個應用事件鎖定對象或invokeLater()此代碼上的鎖。

+0

試試這樣的運氣:(仍然沒有改變圖像 – 2012-02-13 14:16:09

+0

實際上,我的聽衆出現了問題,這很奏效,非常感謝! – 2012-02-13 14:39:33

1

你只需要如果您從某個可能會阻止的地方(如Web服務器)獲取圖像,請使用線程。您只需要更新圖像,但您可能需要在按鈕或屏幕上調用invalidate()。真正有幫助的是一些關於你在做什麼的信息。你甚至沒有告訴我們你使用什麼類來顯示圖像,如果你已經擴展或不擴展等。

+0

感謝您的回覆,我添加了一部分代碼,可以更清楚地說明我的問題! – 2012-02-10 20:17:39

0

我不知道你在做什麼,你的代碼;但刷新屏幕的方式並非如此;

因此,我更改您的CSPS屏幕,您正嘗試刷新屏幕;請參見下面的代碼...

class CSPS extends MainScreen implements FieldChangeListener 
{ 

int width = Display.getWidth(); 
int height = Display.getHeight(); 

ButtonField backButton; 

//ImageButtonField canadianFlag; 
//ImageButtonField americanFlag; 
Bitmap changeableFlag; 
String currentFlag ="canada_flag.png"; 
BitmapField flagField; 
public CSPS() 
{ 
    createGUI(); 
}  

public void createGUI() 
{ 
    canadianFlag = construct("canada_flag.png", 0.18); 
    americanFlag = construct("us.gif", 0.18); 

     canadianFlag.setChangeListener(this); 
     americanFlag.setChangeListener(this); 

     add(flagField); 
     add(canadianFlag); 
     add(americanFlag); 
    //LISTENERS 
} 

public void fieldChanged(Field field, int context){ 


    if(field == canadianFlag) 
    { 
     setCurrentFlagResource("canada_flag.png"); 
     BitmapField newFlagField = populateFlagField(currentFlag, 0.3); 
     replace(flagField, newFlagField); 

     deleteAll(); 
     createGUI(); 
     invalidate(); 
    } 
    else if(field == americanFlag) 
    { 
     setCurrentFlagResource("american-flag.gif"); 
     BitmapField newFlagField = populateFlagField(currentFlag, 0.3); 
     replace(flagField, newFlagField); 

     deleteAll(); 
     createGUI(); 
     invalidate(); 
    } 
} 
} 
  1. 構建一個createGUI()方法,在編寫代碼,你有什麼設計該屏幕。不僅這個屏幕;你正在創造什麼就是這樣做的; 和
deleteAll(); 
createGUI(); 
invalidate(); 
  1. 對於刷新屏幕做上面三行; 刪除全部的字段並再次調用createGUI()方法;最後invalidate();
+0

這可行,但重新填充所有內容需要一段時間,所以會有延遲。頂部的解決方案有點更好,謝謝你的回答! – 2012-02-13 14:40:12