2011-06-13 60 views
1

我正在開發一個Android應用程序,並且有一個帶有3個EditTexts的視圖。我試圖實現的是,在最後一個按下的數字鍵應該調用該活動的okKey事件。問題在於我設置了onKeyListener的EditText,getText和setText方法都無法工作。請允許我解釋一下:Android:getText和setText不能在onKeyListener上使用EditText

想我初始化一個空字符串

String string1 = ""; 

在我的onCreate方法,我設置了onKeyListener上EditTexts的一個現在

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    findViewById(R.id.EditText3).setOnKeyListener(this); 
    ... 
} 

,如果我寫了下面的代碼覆蓋okKey方法

@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { 
     string1 += ((EditText) findViewById(R.id.EditText1)).getText(); 
     string1 += ((EditText) findViewById(R.id.EditText2)).getText(); 
     string1 += ((EditText) findViewById(R.id.EditText3)).getText(); 

     ((EditText) findViewById(R.id.EditText1)).setText(""); 
     ((EditText) findViewById(R.id.EditText2)).setText(""); 
     ((EditText) findViewById(R.id.EditText3)).setText(""); 
    } 
return false; 
} 

只有EditText1和EditText2 g et清除並且EditText3中的文本不會連接到string1。如果我將If語句的條件替換爲

if (keyCode == KeyEvent.KEYCODE_ENTER) 

然後按Enter鍵(設置爲Next),它按預期工作。我試圖在活動的onResume方法中添加setText(「」),但結果沒有區別。我很欣賞你花時間閱讀我的問題!

已編輯:添加了「返回false」;在onKey方法結束時,我在工作中使用了它,但錯過了將它放在這個問題中,克里斯的答案提醒了我。

回答

0

除了Chris的回答,應該添加一個檢查以確保event.getAction()等於KeyEvent.ACTION_UP; onKey被調用兩次,如果getAction()是ACTION_DOWN(第一次調用該方法),那麼該字符尚未被添加到由getText()返回的CharSequence中。

1

當您將OnKeyListener設置爲您的EditText3時,您將替換當您按下某個鍵時發生的情況。在onKey的末尾嘗試return false;。這應該將值傳遞到適當的位置。

http://developer.android.com/reference/android/view/View.OnKeyListener.html

返回

真要是聽衆已經消耗的情況下,否則爲false。

+0

對不起,我應該提到(或放入示例代碼),我在onKey方法結束時返回false。 – user796658 2011-06-14 14:44:14

+0

@Mark,你的建議是答案,它解決了問題!謝啦!你能否將你的評論放入問題的答案中,以便將其標記爲答案? – user796658 2011-06-14 14:45:57

相關問題