2014-06-09 46 views
0

我的應用程序是基於標籤的。例如,應用程序有3個選項卡 - A,B & C.如果當前打開的選項卡是「A」,當用戶再次嘗試點擊同一選項卡時,應用程序不應該執行任何操作。檢索當前活動的屏幕名稱黑莓

我試圖做到這一點使用下面的代碼段

final Screen currentActiveScreen = UiApplication.getUiApplication().getActiveScreen(); 

     if (newScreen == currentActiveScreen) 
     { 
      return; 
     } 

新建屏幕是用戶試圖瀏覽到屏幕上。

但是這段代碼並沒有被觸發,當我嘗試調試時,我發現一些隨機數也隨着屏幕出現,因此代碼沒有進入if循環。

條件中的值是這樣的,並返回false。 AScreen @ 497293b7 == AScreen @ 2f25c01e

所以,我想要做什麼有什麼問題?我們如何才能獲得屏幕名稱。

在此先感謝。

回答

0

在BlackBerry Java中沒有這樣的屏幕名稱。凱文是對的 - 你無法直接比較屏幕(因爲他在答覆中解釋的原因)。您需要定義自己的辨別機制,以便在創建之前檢查您要導航到的屏幕的類型

如果您有3個選項卡,您可以預先創建3個屏幕(每個選項卡一個),將它們存儲在對象的三個成員中,然後只需在用戶按下某個對象時刪除並添加所需的屏幕。在這之前,你確實可以比較你試圖提出的屏幕和當前屏幕。

事情是這樣的:

Screen tabA = new MyScreenForTabA(); 
Screen tabB = new MyScreenForTabB(); 
Screen tabC = new MyScreenForTabC(); 
//... 
// Somewhere else in the code 
//... 
    Screen nextScreen; 
    switch (chosenTabLetter) { // Just throwing an idea 
     case 'A': 
      nextScreen = tabA; 
      break; 
     case 'B': 
      nextScreen = tabB; 
      break; 
     case 'C': 
      nextScreen = tabC; 
      break; 
    } 
    if (nextScreen == currentScreen) { 
     return; 
    } 

這樣你可以忙裏忙外的三個屏幕,而不不斷創造新的。

0

這裏沒有太多可以繼續,您可能需要添加更多的細節。

你看到的那些數字是對象的哈希碼。如果newScreen涉及屏幕的新實例,==將不會評估爲true。 有兩個選擇, 要麼覆蓋您的自定義屏幕的equals方法; 或使A,B和C不同類(它們很可能已經),然後使用instanceof

例如,

ScreenA newScreen = new ScreenA(); 
if (currentActiveScreen instanceof ScreenA) return; 
+0

謝謝凱文。會試試這個。 黑/白,有沒有什麼辦法可以找出屏幕名稱? – Kris

+0

你的屏幕名稱是什麼意思? – Kevin

+0

屏幕的標題! – Kris