2011-05-24 70 views
2

我喜歡上一個EditText一個TextWatcher這TextWatcher表現不同仿真器/電話

// the text changed listener for the search field 
private TextWatcher searchWatcher = new TextWatcher() 
{ 

    @Override 
    public void afterTextChanged(Editable span) 
    { 
    Log.v(TAG, "afterTextChanged: "+etSearch.getText().toString()); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, 
           int start, 
           int count, 
           int after) 
    { 
    Log.v(TAG, "beforeTextChanged: "+etSearch.getText().toString() 
     +"; start="+start+"; count="+count+"; after="+after); 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
    Log.v(TAG, "onTextChanged: "+etSearch.getText().toString()); 
    } 
} 

(其中etSearch是我EDITTEXT與etSearch.addTextChangedListener(searchWatcher)。)

我有一個索尼愛立信Xperia運行2.1 UPDATE1並且AVD也運行2.1-update1。在模擬器中,我點擊EditText,使用軟鍵盤輸入abc,然後點擊del按鈕一次。在手機上,我觸摸EditText,在軟鍵盤上輸入abc並敲擊del一次。在電話裏,我得到這個:

beforeTextChanged: ; start=0; count=0; after=1 
onTextChanged: a 
afterTextChanged: a 

beforeTextChanged: a; start=0; count=1; after=2 
onTextChanged: ab 
afterTextChanged: ab 

beforeTextChanged: ab; start=0; count=2; after=3 
onTextChanged: abc 
afterTextChanged: abc 

beforeTextChanged: abc; start=0; count=3; after=2 
onTextChanged: ab 
afterTextChanged: ab 

在模擬器上,我得到這個:

beforeTextChanged: ; start=0; count=0; after=1 
onTextChanged: a 
afterTextChanged: a 

beforeTextChanged: a; start=1; count=0; after=1 
onTextChanged: ab 
afterTextChanged: ab 

beforeTextChanged: ab; start=2; count=0; after=1 
onTextChanged: abc 
afterTextChanged: abc 

beforeTextChanged: abc; start=2; count=1; after=0 
onTextChanged: ab 
afterTextChanged: ab 

他們爲什麼不一樣呢?哪一個是正確的行爲?

回答

2

您確定您在兩種情況下都完全一樣嗎?雖然不同,但這兩種解釋都是有意義的。但是,仿真器結果看起來更合乎邏輯。例如:

beforeTextChanged: ab; start=2; count=0; after=1 

對我說,在位置2(開始= 2)你有沒有更多的字符(計數= 0),但你加1個字元(後= 1)。而這正是您將字符串從ab擴展到abc時發生的情況。

在另一方面的Xperia說

beforeTextChanged: ab; start=0; count=2; after=3 

對我說,從位置0開始,您更換現有2個字符3個新。難道是你在這種情況下刪除了ab並從開始加入abc

UPDATE:

據的變化是如何製作的方式更新的描述,正確的behviour是一個在模擬器上觀察到。

在Nexus One上也觀察到與在仿真器上觀察到的行爲相同的行爲。所以我想說在Xperia上被忽視的行爲更像是例外。

+0

在模擬器中,我單擊EditText,使用軟鍵盤輸入abc,然後單擊del按鈕一次。在手機上,我觸摸EditText,在軟鍵盤上輸入abc並敲擊del一次。 (由澄清原來的職位。) – 2011-05-24 13:11:59

+0

回覆:更新 - 這就是我想,是因爲它在參考(http://developer.android.com/reference/android/text/TextWatcher.html)匹配TextWatcher,所以我可以認爲,Xperia只是奇怪,其他手機會正確嗎? – 2011-05-24 13:28:08

+1

@Ben Williams - 在檢查之前不想給我答案。我對它進行了檢查,在Nexus One上觀察到的行爲與您在仿真器上觀察到的行爲相同。 – Zelimir 2011-05-24 13:41:11