2011-01-19 318 views
0

我在黑莓應用程序中有一個主菜單。當我輸入菜單項並需要返回到主菜單時,我想訪問不同的屏幕。我該怎麼做?從推黑屏返回到父屏幕

這裏是我的嘗試,但趕上了一個運行時異常按下後退按鈕時:

package com.stockmarket1; 


import net.rim.device.api.system.Bitmap; 
    import net.rim.device.api.ui.*; 
    import net.rim.device.api.ui.container.*; 
    import net.rim.device.api.ui.component.*; 
    import net.rim.device.api.ui.decor.*; 
    import net.rim.blackberry.api.push.PushApplication; 

    public class StockMarket extends UiApplication implements FieldChangeListener { 
     public Screen _clientList; 
     public Screen _comments; 
     public Runnable _popRunnable; 

    public static void main(String[] args) 
    { 
     StockMarket theApp = new StockMarket(); 
     theApp.enterEventDispatcher(); 
    } 

    public StockMarket() { 
     //Code for MainScreen 
     final MainScreen baseScreen = new MainScreen(); 

     baseScreen.setTitle("Colombo Stock Exchange"); 
     ButtonField clientList = new ButtonField("View Client List", ButtonField.CONSUME_CLICK); 
     clientList.setChangeListener(new FieldChangeListener() { 

      public void fieldChanged(Field field, int context) { 
       pushScreen(_clientList); 
       } 
     }); 

     ButtonField comments= new ButtonField("View Comments", ButtonField.CONSUME_CLICK); 
     comments.setChangeListener(new FieldChangeListener() { 

      public void fieldChanged(Field field, int context) { 
       pushScreen(_comments); 
       } 
     });  
     Bitmap bitmap = Bitmap.getBitmapResource("logo1.png"); 
     BitmapField logo = new BitmapField(bitmap, BitmapField.FIELD_HCENTER); 
     LabelField newLine = new LabelField("\n"); 

     baseScreen.add(logo); 
     baseScreen.add(newLine); 
     baseScreen.add(clientList); 
     baseScreen.add(comments); 


     //Code for _comments 
     _comments = new FullScreen(); 
     _comments.setBackground(BackgroundFactory.createSolidBackground(Color.LIGHTCYAN)); 
     LabelField title = new LabelField("Comments",LabelField.FIELD_HCENTER); 


     LabelField comment = new LabelField("Type"); 
     RichTextField rtfComment = new RichTextField(); 

     _comments.add(title); 
     _comments.add(comment); 
     _comments.add(rtfComment); 

     //Code for _clientList 
     _clientList = new FullScreen(); 
     _clientList.setBackground(BackgroundFactory.createSolidBackground(Color.LIGHTBLUE)); 
     LabelField clientTitle = new LabelField("Listed Companies\n\n", LabelField.FIELD_HCENTER); 
     LabelField line = new LabelField("__", LabelField.USE_ALL_HEIGHT); 

     ButtonField closeClient = new ButtonField("Close", ButtonField.CONSUME_CLICK); 


     closeClient.setChangeListener(new FieldChangeListener() { 

      public void fieldChanged(Field field, int context) { 
       pushScreen(baseScreen); 
      } 
     }); 

     _clientList.add(clientTitle); 
     _clientList.add(line); 

     //Events 
     pushScreen(baseScreen); 
    } 

    public void fieldChanged(Field field, int context) { 
     // TODO Auto-generated method stub 

    } 
} 

回答

1

您的「關閉」按鈕的代碼是一個問題,但我認爲你說你得到一個RuntimeException當敲設備上的「後退」按鈕,我認爲這有不同的原因。

而不是將菜單屏幕推到屏幕堆棧上,您應該彈出當前屏幕。這將返回到之前顯示的菜單屏幕:

closeClient.setChangeListener(new FieldChangeListener() { 
     public void fieldChanged(Field field, int context) { 
      // previous code: 
      // pushScreen(baseScreen); 
      // correct code: 
      popScreen(_clientList); 
     } 
    });