3

我在这样的 EditText 上有一个 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)。)

我有一个运行 2.1-update1 的索尼爱立信 Xperia 和一个也运行 2.1-update1 的 AVD。在模拟器中,我单击 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

为什么他们不一样?哪一个是正确的行为?

4

1 回答 1

3

你确定你在这两种情况下都在做完全相同的操作吗?虽然不同,但两种结果都是有意义的。但是,模拟器结果看起来更合乎逻辑。例如:

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

对我说,在位置 2(start = 2)你没有更多的字符(count = 0),但你又添加了 1 个字符(after = 1)。ab当您将字符串从to扩展时,这正是发生的事情abc

另一方面,Xperia 说

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

对我说,从位置 0 开始,您将 2 个现有字符替换为 3 个新字符。难道是你在这种情况下从一开始就删除ab并添加abc了?

更新:

根据对如何进行更改的方式的更新描述,正确的行为是在模拟器上观察到的。

在 Nexus One 上也观察到与在模拟器上观察到的相同行为。所以我想说在 Xperia 上观察到的行为更像是异常。

于 2011-05-24T12:59:40.490 回答