2012-05-25 59 views
0

所以我有三個EditText-盒子,當用戶按下其中一個Enter時,我想要移動到下一個。getText()在EditTexts上的奇怪行爲

我想:

final EditText email = (EditText) findViewById(R.id.editText1); 
email.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.editText2).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 


final EditText pass = (EditText) findViewById(R.id.editText2); 
pass.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.editText3).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 



final EditText passrep = (EditText) findViewById(R.id.editText3); 
passrep.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.button1).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 

但與此代碼將焦點從editText1跳到editText3鍵盤上輸入。

什麼工作是這樣的(我偶然被發現):

final EditText email = (EditText) findViewById(R.id.editText1); 
email.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.editText2).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 


final EditText pass = (EditText) findViewById(R.id.editText2); 
email.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.editText3).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 



final EditText passrep = (EditText) findViewById(R.id.editText3); 
email.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
      (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      findViewById(R.id.button1).requestFocus(); 
      return true; 
     } 
     return false; 
    } 
}); 

例如,設定三種不同的OnKeyListeners所有相同的EditText(電子郵件)。

我在這裏錯過了什麼?這是我的佈局:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="234dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:ems="10" 
    android:inputType="textEmailAddress" 
    android:layout_marginTop="20dp" 
    android:hint="Email" > 

</EditText> 

<EditText 
    android:id="@+id/editText2" 
    android:layout_width="234dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:ems="10" 
    android:inputType="textPassword" 
    android:layout_marginTop="20dp" 
    android:hint="Password" /> 

<EditText 
    android:id="@+id/editText3" 
    android:layout_width="234dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:ems="10" 
    android:inputType="textPassword" 
    android:layout_marginTop="20dp" 
    android:hint="Confirm Password" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="123dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginTop="35dp" 
    android:text="@string/submit" /> 
+0

那麼您當前的實施會發生什麼? – Warpzit

+0

這是不是一個替代解決方案http://stackoverflow.com/questions/5048586/can-you-set-tab-order-in-xml-layout –

回答

2

其實這裏發生的一切都是你的EditText S的被監聽按鍵事件ALL THE TIME無論他們是在焦點或不

您需要使用OnEditorActionListener爲完成/回車/開始/搜索鍵

editText.setOnEditorActionListener(new OnEditorActionListener() {   
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if(actionId==EditorInfo.IME_ACTION_DONE){ 
      //do something 
     } 
    return false; 
    } 
}); 
+0

啊,我看到了...謝謝! – FWeigl