选择项目后无法从 android AutoCompleteTextView 获取用户输入的文本

Can't get user entered text from android AutoCompleteTextView after item selected

我在片段中有一个 AutoCompleteTextView (android.support.v4.app)。用户在下拉列表中选择一个项目后,我想保留他们输入的文本。这是我的。

首先是class定义:

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 一起工作,但广泛的兼容性似乎是一个问题。

所以我被卡住了,我没有头发了。有人有什么建议吗?

@Rishi Ayyappa 正视我们 Testwatcher

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) {

        }
    });