2011-06-01 131 views
3

我是一個長期的自學成才的業餘VB程序員,他現在正試圖自學Java和Android。我這樣說,所以你會知道我不會很好地說這個術語,並且對這兩個追求非常新。捕獲EditText失去焦點

我開發了一個Android窗體,它具有一系列EditText框,每個用戶填充後我都希望保存到一個數組的內容。我已經想出瞭如何在用戶按下Enter鍵。但是,人們並沒有這樣做:他們點擊框,鍵入,然後點擊下一個元素。

我VB,我可以爲lostfocus事件編寫代碼。但是我無法在Java中找到類似的方法。

最後的問題是:有沒有一種方法來捕獲EditText失去焦點時,所以我可以將類型化數據保存在該類型而不依賴於Enter鍵?

public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)){ 
     Editable wasted=edittext_asset.getText(); 
     vehdata[vehNo][Integer.parseInt((String) edittext_asset.getTag())]=wasted.toString(); 
     return true; 
    } 
    return false; 
} 

請記住,我很新的這,我還經常不知道從哪裏把代碼片段,以使他們的工作(新文件?onCreate方法?誰知道)。您可以給我的任何指導將受到感謝和永久讚賞。

+0

請給我們看一些代碼,所以我們知道您已經嘗試過了,我們可以添加它。 – 2011-06-01 04:30:31

+0

公共布爾安其(視圖V,INT的keyCode,KeyEvent的事件){ 如果((event.getAction()== KeyEvent.ACTION_DOWN)&& (鍵代碼== KeyEvent.KEYCODE_ENTER)){ 可編輯的浪費= edittext_asset.getText( ); vehdata [vehNo] [Integer.parseInt((String)edittext_asset.getTag())] = wasted.toString(); 返回true; } return false; } – 2011-06-01 04:42:24

+0

哇。在問題中添加代碼標籤。我會爲你做的 – 2011-06-01 05:04:00

回答

1

我剛剛做了類似這樣的事情。我通過創建一個for-loop來處理它,它通過id獲取每個edittext的內容並將其添加到數組中。我在onclick方法中做了這個,因爲我在用戶點擊一個按鈕之後做了這一切。

String ohhai; 
String duh = et.getText().toString(); 
int number = Integer.parseInt(duh); 
List<String> myCollection=new ArrayList<String>(); 
EditText stuff; 
int editt; 
String loggy; 
for(int z = 0; z < number; z++){ 
    stuff = (EditText)findViewById(z); 
    editt = stuff.getId(); 
    loggy = Integer.toString(editt); 
    Log.e("How Many", loggy); 
    ohhai = stuff.getText().toString(); 
    myCollection.add(ohhai); 
} 

String [] arr = myCollection.toArray(new String[myCollection.size()]); 
String separator = "0"; 
StringBuffer result = new StringBuffer(); 
if (arr.length > 0) 
    result.append(arr[0]); 
for (int h=1; h < arr.length; h++) { 
    result.append(separator); 
    result.append(arr[h]); 
} 
+0

增加的代碼如果你需要更多的幫助,請告訴我 – DustinRiley 2011-06-01 05:28:54

+0

非常感謝,認同有點有趣,我會解決這個問題 – 2011-06-01 17:43:28

+0

是的,它直接出我的程序。奇怪的變量名稱,而且我的外觀習慣很糟糕,但是謝謝你的修正! – DustinRiley 2011-06-01 20:26:18

6

讓我們通過部分去:

  • 「我可以寫LostFocus事件代碼,但我不能找到Java中的一個類似的方法。」:看看在OnFocusChangeListener API
  • 「有沒有一種方法來捕獲EditText失去焦點時」:是的,使用上面的聽衆和abstract void onFocusChange(View v, boolean hasFocus)
  • 「請記住,我對這個很新鮮」:我們在這裏一直都是新來的:)如果你是尊重的,並回饋社區(eithe r通過答案,或者只是投票上/下,接受答案),沒有什麼可擔心的。

然後一些:

我是一個自我學習的你,所以我覺得現在你的痛苦,我想現在給你一些建議,你開始與Android :您添加了兩個標籤:。在java中編寫桌面程序與爲android設備編碼完全不同,所以請考慮這一點。你真的要在Java中或只是在Android的代碼?除了API的一些明顯差異之外,主要區別在於用戶交互。大多數java程序都需要一個全鍵盤和一個靜態屏幕,而android應用程序依靠觸摸,這是一個關鍵的區別。

觸摸很重要,因爲通常在沒有焦點增益的情況下沒有丟失的焦點在其他視圖上。一個典型的EditText將在IME上被手指填滿,並且該視圖將保持焦點,直到同一手指觸摸另一個視圖(可能是EditText,或許是按鈕)。 「窗口」外通常沒有點擊。

另一方面,在Android設備中,您期望的是單個用戶,而不是桌面上的未知數量的用戶。因此,保存數據和檢索數據的處理方式會有很大不同(請參閱,例如,Saving Android Activity state using Save Instance State

您可以選擇捕獲焦點的增益/損失以執行操作,或者等到單擊按鈕時,或者甚至使用其他方法(例如TextWatcher來保存每個字符輸入的數據)。所以,你有很多選擇來設計你的應用程序。困難的部分是設計巧妙。

祝你好運!

+0

現在我專注於Android編程,但我也在嘗試充分學習Java來替代桌面應用程序的VB。一個安全專業的貿易,所以我想桌面程序的數據操作和android應用程序的fieldwork。 – 2011-06-01 07:20:43

+1

onfocuschangelistener似乎是我想要的,但我現在有一個新的小故障:它工作正常,當我點擊另一個EditText,但我當我單擊一個微調器時,不能讓EditText釋放焦點我已經將spinners的focusable和focusableontouch屬性設置爲true,但是當我點擊時,onfocuschange方法不會被調用(我在裏面放了一個烤麪包,所以我可以檢查)。 – 2011-06-01 19:38:04