2016-11-18 61 views
0

我有一個AutoCompleteTextView在片段(android.support.v4.app)中。用戶在下拉菜單中選擇一個項目後,我想保留它們輸入的文本。這是我的。無法從android AutoCompleteTextView中獲取用戶輸入的文本後選擇

第一類定義:

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

你爲什麼不嘗試TextWatcher並保存在臨時串 –

回答

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

     } 
    }); 
+0

@Rushi輸入的文本使用權,你是正確的。 beforeTextChanged()在用戶從下拉列表中選擇一個值後保留所需的值。我是Android的新手,但是我讀了一個讓我認爲TextWatcher長期不安全的線程,所以我沒有深入探索它......抱歉,現在找不到線程。 –

+0

馬科斯,感謝您的代碼。我似乎不需要onClick事件或isSpinner ...條件,但代碼塊模板非常有幫助。謝謝。 –

相關問題