我在片段中有一个AutoCompleteTextView(android.support.v4.app)。用户在下拉列表中选择一个项目后,我想保留他们输入的文本。这就是我所拥有的。
首先是类定义:
public class MyFragment extends Fragment
implements
AutoCompleteTextView.OnDismissListener,
AutoCompleteTextView.OnKeyListener,
AutoCompleteTextView.OnEditorActionListener {
在onViewCreated()中我有这些作业:
myAutoComplete.setOnDismissListener(MyFragment.this);
myAutoComplete.setOnKeyListener( MyFragment.this );
myAutoComplete.setOnEditorActionListener(MyFragment.this);
我添加了这些方法:
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
Log.i("************(arg0) ", arg0.toString());
Log.i("************(arg1) ", arg0.toString());
Log.i("***********(keyevent) ", arg2.toString());
return false;
}
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
Log.i("************(arg0) ", arg0.toString());
Log.i("************(arg1) ", arg0.toString());
Log.i("***********(keyevent) ", arg2.toString());
return false;
}
@Override
public void onDismiss() {
// Fires when the dropdownlist is dismissed.
// The event is assigned in onViewCreated
}
我的第一个希望是onDismiss()事件会在用户输入的文本被所选项替换之前触发。如图所示,该事件会正确触发,但在用所选项目替换用户文本后。
然后我连接了两个不同的关键监听器,希望在输入时捕获并存储该值。这些都不会开火。在研究了这个问题之后,我了解到关键的听众只是设计用于物理键盘。虽然有些人似乎已经开始使用软kybds,但广泛的兼容性似乎是一个问题。
所以我被卡住了,我没有留下任何头发。有人有什么建议吗?
答案 0 :(得分:1)
@Rushi Ayyappa是正确使用TextWatcher
autoCompleteTextView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(){
if(isSpinnerAlreadySelected){
autoCompleteTextView1.setEnabled(true);
autoCompleteTextView1.performClick();
}
});
autoCompleteTextView1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(isSpinnerAlreadySelected){
autoCompleteTextView1.setEnabled(false);
//Notify the user he cannot type and why?? Toast??
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});