2017-04-26 160 views
0

我想讓用戶輸入文本到編輯文本。當用戶點擊輸入鍵時,我想從編輯文本中獲取文本並將其添加到我的ArrayList中。我遇到了編輯文本中控制keyEvent的問題。處理輸入按鍵編輯文本

public class MainActivity extends Activity { 
ArrayList<String> array_list; 
ListAdapter lv; 
ListView list; 
EditText edittext; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    array_list = new ArrayList<String>(); 
    edittext = (EditText) findViewById(R.id.textView); 
    lv = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array_list); 
    list = (ListView) findViewById(R.id.lstView); 

    list.setAdapter(lv); 
    edittext.requestFocus(); 

    edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      boolean handled = false; 
      if (actionId == EditorInfo.IME_ACTION_GO) { 
       array_list.add(edittext.getText().toString()); 
       edittext.setText(""); 
       edittext.requestFocus(); 
      } 
      return handled; 
     } 
    }); 
} 
} 

所以我需要發生的是,當用戶按下enter鍵時,它將字段中的文本添加到arrayList中。然後它擦除文本字段中的文本,並再次給予焦點。

+1

請出示你的代碼?很難猜測你的問題。 – Christopher

+0

我見過有人使用onKeyListeners和textWatchers。我只是想知道哪一個最容易使用,以及如何實現它。 –

+0

他們實際上做了不同的事情。 'OnKeyListener'將監聽某些鍵盤按鍵,然後執行,另一方面'TextWatcher'只接收新文本,並且可能不會接收\ n字符,除非EditText被設置爲多行。無論如何,我相信'OnKeyListener'是最好的方法。 –

回答

2
editText.setOnEditorActionListener(new OnEditorActionListener() { 
@Override 
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    boolean handled = false; 
    if (actionId == EditorInfo.IME_ACTION_GO) { 
     //Perform your Actions here. 

    } 
    return handled; 
    } 
});` 

,並在你的XML,你做這樣的事情 <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text|textUri" android:imeOptions="actionGo" android:imeActionId="666" android:imeActionLabel="Some Label" android:maxLines="1"/>

的關鍵,這是包含機器人的XML行:IME ...

+0

我已經實現了這兩個到我的代碼和代碼不執行時,輸入按鈕被擊中 –

+0

顯然你必須指定android :maxLines =「1」,否則它只是輸入新的行命令。也許它與你使用的鍵盤有關,但如果你不需要多行edittext,我建議你以這種方式使用它。我測試過了,它似乎在我的最後工作。我編輯了答案 – bogdanN