我想收听EditText's
的关键事件,每当按下next
时,我想将EditText
的文本保存到我的数据对象中。我实施了OnKeyListener
及其onKey()
方法,该方法从未被调用过,无法解决原因......这是我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
v = inflater.inflate(R.layout.frag_userprofile_myinfo, container, false);
context = getActivity().getApplicationContext();
global = (eKeshGlobal) context;
pbWait = (ProgressBar) v.findViewById(R.id.pbWait);
bnDone = (Button) v.findViewById(R.id.bnDone);
rlBack = (RelativeLayout) v.findViewById(R.id.rlBack);
etFirstName = (EditText) v.findViewById(R.id.etFirstName);
etLastName = (EditText) v.findViewById(R.id.etLastName);
etAdress = (EditText) v.findViewById(R.id.etAdress);
etMobile = (EditText) v.findViewById(R.id.etMobile);
etDob = (EditText) v.findViewById(R.id.etDob);
etOib = (EditText) v.findViewById(R.id.etOib);
etFirstName.setOnKeyListener(this);
etLastName.setOnKeyListener(this);
etAdress.setOnKeyListener(this);
etMobile.setOnKeyListener(this);
etDob.setOnKeyListener(this);
etOib.setOnKeyListener(this);
return v;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode ==
KeyEvent.KEYCODE_ENTER)) {
switch(v.getId()) {
case R.id.etFirstName:
user.setFirstName(etFirstName.getText().toString());
return true;
case R.id.etLastName:
user.setLastName(etLastName.getText().toString());
return true;
case R.id.etAdress:
user.setAddress(etAdress.getText().toString());
return true;
case R.id.etMobile:
user.setMobile(etMobile.getText().toString());
return true;
case R.id.etDob:
user.setDateOfBirth(Utils.formatDate(context,
etDob.getText().toString()));
return true;
case R.id.etOib:
user.setOib(etOib.getText().toString());
return true;
default:
return false;
}
}
return false;
}
当然,我已经实施了听众:
public class UserProfileMyInfo extends Fragment implements View.OnKeyListener
以下是EditText
xml:
<EditText
android:id="@+id/etLastName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:ems="10"
android:hint="@string/my_profile_lastname"
android:imeOptions="actionNext"
android:inputType="text"
android:singleLine="true" />
我真的没有想法来完成这项工作,我也尝试onKeyDown()
,但也没有工作......提前谢谢!
答案 0 :(得分:2)
从文档中,View.OnKeyListener
用于硬件密钥。这就是为什么它不起作用。
硬件密钥时要调用的回调的接口定义 事件被分派到此视图。之前将调用回调 关键事件被赋予视图。这仅适用于硬件 键盘;软件输入法没有义务触发这个 监听器。
答案 1 :(得分:1)
如果您只想捕获Next键事件,则应考虑使用android:imeOptions
。
在清单中将其设置为
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="text"
android:imeOptions="actionNext" />
并在EdiText上调用setOnEditorActionListener()方法的代码中捕获它
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
//do your stuff here
handled = true;
}
return handled;
}
});
还有很多其他选择。请访问here.