在选择项目后,无法从用户输入的文件来自Android AutoCompleteTextView

时间:2016-11-18 09:01:45

标签: android autocompletetextview onkeylistener

我在片段中有一个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,但广泛的兼容性似乎是一个问题。

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

1 个答案:

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

        }
    });