2011-10-01 68 views
4

我在我的登錄表單中有2個EditField,名稱爲Email:和Password :.就在電子郵件下方,我有登錄按鈕。假設我下來登錄,我只能回滾到密碼字段。光標未能到達Email字段。在模擬器中,我嘗試使用箭頭鍵以及觸控板。請幫助如何回滾動到第一EditField中Editfield滾動無法在黑莓手機上排名第一

AbsoluteFieldManager ab = new AbsoluteFieldManager(); 

    add(ab); 
    new SeparatorField(); 

    et=new EditField("Email-id:",""); 
    pwd=new PasswordEditField("Password:",""); 

    ab.add(et,35,110); 
    ab.add(pwd,35,150); 

我使用AbsoluteFieldManager和OS 6.0開發。我希望登錄屏幕看起來像Facebook登錄頁面。 請讓我知道什麼可能是不能向上滾動的原因

回答

2

也許這是一個錯誤RIM與AbsoluteFieldManager。以前從未使用過,所以我不知道它。您可以創建一個解決方案來解決此問題。在下面找到:

et=new EditField("Email-id:",""); 
pwd=new PasswordEditField("Password:","") { 
    protected int moveFocus(int amount, int status, int time) { 
     int cursorPosition = this.getCursorPosition(); 
     if ((cursorPosition == 0) && (amount < 0)) { 
      et.setFocus(); 
      return 0; 
     } 
     else { 
      return super.moveFocus(amount, status, time); 
     } 
    } 
}; 

這樣,當你到達在密碼編輯字段中的第一個元素,你將迫使電子郵件領域得到關注。這將作爲解決您的工作。

解決這個問題的另一種方法是在一個水平的字段管理器中添加這兩個字段,這樣我猜這肯定會適合你。如果不使用第一種方法。你可以找到Horizo​​ntalFieldManager下面的代碼:

et=new EditField("Email-id:",""); 
pwd=new PasswordEditField("Password:",""); 
HorizontalFieldManager manager = new HorizontalFieldManager(); 
manager.add(et); 
manager.add(pwd); 
ab.add(manager, yourX, yourY); 
-2

你所描述的是不正常的行爲。

我的結論是,你的代碼有一個或多個錯誤,爲了解決你的問題,你應該修改你的代碼來修復錯誤。然後您將能夠在各個領域上下滾動。

備註:正如這個問題所示,我不可能對具體的錯誤更具體。因此,我將向您展示您所描述的佈局示例,該佈局可以正確滾動,並且可以將其用作默認設置,以確定哪些偏差導致了您的錯誤。

// inside MainScreen constructor 
add(new EditField("Username:","",0)); 
add(new EditField("Password:","",0)); 
add(new ButtonField(buttonBMP,ButtonField.CONSUME_CLICK)); 
+0

(不是我的downvote),但這種反應不是特別有助於回答這個問題 –

+0

@RobertMartin這是非常不公平的,我不能具體談談,因爲這個問題的bug沒有包含任何代碼。問一個廣泛的問題,得到一個廣泛的答案,不要責怪回答者。來吧,我需要去100000 –

2

它也可能是一個RIM錯誤。你使用什麼操作系統?它是OS 5+嗎?你對屏幕上的一些UI元素(包括屏幕本身)使用自定義填充/邊距/邊框嗎?如果是的話,嘗試註釋掉任何設置填充/邊界/邊界的代碼來檢查是否是這種情況。

+0

我正在使用AbsoluteFieldManager。如果我創建兩個AbsoluteFieldManager,一個用於用戶名,密碼,另一個用於登錄按鈕,忘記密碼部分,那麼我可以滾動回用戶名....但登錄字段將轉到下一頁 –

+0

我從未使用AbsoluteFieldManager ',因爲這個類的用法在我看來是一種黑客(這就是爲什麼我要避免它)。你的情況**可能**與你使用'AbsoluteFieldManager'相關。對不起,如果這聽起來有點冒犯,不過問問自己 - 你真的需要它嗎?這是因爲你不理解BB UI API的水平,允許使用默認組件創建屏幕布局? –

+0

這是爲什麼我使用AbsoluteFieldManager的要求。我的應用徽標出現在中心頂部,在其下方,用戶登錄憑證應保留。按照佈局,我瞭解了這位經理。無論如何,謝謝你的幫助。我很欣賞它 –

0

您可以使用此代碼登錄頁面:

public class loginscreen extends MainScreen implements FieldChangeListener { 

private int deviceWidth = Display.getWidth(); 
private int deviceHeight = Display.getHeight(); 
private VerticalFieldManager subManager; 
private VerticalFieldManager mainManager; 
public long mycolor = 0x00FFFFFF; 

Screen _screen = home.Screen; 
TextField heading = new TextField(Field.NON_FOCUSABLE); 

TextField username_ef = new TextField(); 
PasswordEditField password_ef = new PasswordEditField(); 
CheckboxField rememberpass = new CheckboxField(); 
public ButtonField login_bt = new ButtonField("Login", ButtonField.CONSUME_CLICK); 
public ButtonField register_bt = new ButtonField("Register", ButtonField.CONSUME_CLICK); 

public loginscreen() 
{ 
    super(); 
    final Bitmap backgroundBitmap = Bitmap.getBitmapResource("bgd.png"); 

    HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR) 

    { 

    protected void sublayout(int width, int height) 

    { 

    Field field; 

    int numberOfFields = getFieldCount(); 

    int x = 245; 

    int y = 0; 

    for (int i = 0;i < numberOfFields;i++) 

    { 

    field = getField(i); 

    setPositionChild(field,x,y); 

    layoutChild(field, width, height); 

    x +=_screen.getWidth()-381; 

    y += 0;//l17 

    } 

    width=_screen.getWidth(); 

    height=48;//w19 

    setExtent(width, height); 

    } 

    }; 


    mainManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR) 
    { 

     public void paint(Graphics graphics) 
     { 
      graphics.clear(); 
      graphics.drawBitmap(0, 0, deviceWidth, deviceHeight, backgroundBitmap, 0, 0);      
      super.paint(graphics); 
     }    
    }; 
    //this manger is used for adding the componentes 
    subManager = new VerticalFieldManager(Manager.VERTICAL_SCROLL | Manager.VERTICAL_SCROLLBAR) 
    { 
     protected void sublayout(int maxWidth, int maxHeight) 
     { 
      int displayWidth = deviceWidth; 
      int displayHeight = deviceHeight; 

      super.sublayout(displayWidth, displayHeight); 
      setExtent(displayWidth, displayHeight); 
     } 

     public void paint(Graphics graphics) 

     { 
      graphics.setColor((int) mycolor); 
     super.paint(graphics); 

     } 
    }; 


    username_ef.setLabel("Username: "); 
    password_ef.setLabel("Password: "); 
    rememberpass.setLabel("Remember Password"); 
    heading.setLabel("Please enter your credentials: "); 

    username_ef.setMaxSize(8); 
    password_ef.setMaxSize(20); 

    subManager.add(heading); 
    subManager.add(username_ef); 
    subManager.add(password_ef); 
    subManager.add(rememberpass); 
    subManager.add(new SeparatorField()); 
    login_bt.setChangeListener(this); 
    register_bt.setChangeListener(this); 

    hfm.add(login_bt); 
    hfm.add(register_bt); 
    subManager.add(hfm); 

    mainManager.add(subManager); 
    this.add(mainManager); 

} 

public boolean onSavePrompt() 
{ 
    return true; 
} 


public void fieldChanged(Field field, int context) { 
    // TODO Auto-generated method stub 
    if(field == login_bt) 
    { 
     //do your code for login button click   
    } 

    if(field == register_bt) 
    { 
     //code for register button click 
    } 
}}