我最近购买了专业Android 4应用程序开发,我对第一个“todo-list”项目提出了一个问题(用户在EditText中输入内容,按下回车键和在添加到ListView之前输入的文本:
一切正常,但只要我将目标SDK设置为16(4.1)或更高,当我按下回车键时onKeyListener就不会触发。为什么这样,有没有办法解决这个问题?
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) {
todoItems.add(0, myEditText.getText().toString());
aa.notifyDataSetChanged();
myEditText.setText("");
return true;
}
return false;
}
});
谢谢:)
答案 0 :(得分:0)
我认为你应该使用setOnEditorActionListener
。
XML布局中的EditText
:
<EditText
android:id="@+id/myEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone" />
你的行动:
EditText myEditText = (EditText) findViewById(R.id.myEditText);
myEditText
.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Your action
}
return true;
}
});
您可以使用TextWatcher
:
EditText myEditText = (EditText) findViewById(R.id.myEditText);
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.toString().substring(start).contains("\n")) {
// YOur action
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// empty
}
@Override
public void afterTextChanged(Editable s) {
// empty
}
});