2015-05-04 14 views
7

Tôi muốn thêm khoảng trắng khi người dùng chọn văn bản từ đề xuất hoàn thành tự động, vì vậy khi anh tiếp tục nhập, anh ta sẽ bắt đầu từ một từ mới.Cách thêm dấu cách vào đề xuất AutoCompleteTextView

Tôi đã cố gắng thực hiện việc đó bằng cách sử dụng TextWatcher nhưng tôi nhận được IndexOutOfBoundsException.

Mọi đề xuất?

enter image description here

người quan sát văn bản tôi sử dụng là:

private class AddSpaceTextWatcher implements TextWatcher{ 

    boolean shouldAddSpace = false; 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (count - before > 1) // check that the new input is not from the keyboard 
      shouldAddSpace = true; 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (shouldAddSpace) { 
      shouldAddSpace = false; 
      mAutoCompleteTextView.setText(" "); 
     } 
    } 
} 

Ngoại lệ tôi nhận được là:

java.lang.IndexOutOfBoundsException: setSpan (18 ... 18) ends beyond length 1 
     at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1018) 
     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:611) 
     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:607) 
     at android.text.Selection.setSelection(Selection.java:76) 
     at android.text.Selection.setSelection(Selection.java:87) 
     at android.widget.EditText.setSelection(EditText.java:99) 
     at android.widget.SearchView.setQuery(SearchView.java:1465) 
     at android.widget.SearchView.onQueryRefine(SearchView.java:889) 
     at android.widget.SuggestionsAdapter.onClick(SuggestionsAdapter.java:371) 
     at android.view.View.performClick(View.java:4756) 
     at android.view.View$PerformClick.run(View.java:19748) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
+1

bạn có thể đăng mã và ngăn xếp của ngoại lệ không? – Blackbelt

+0

có thể bạn cần gọi nối thêm thay vì setText – Blackbelt

+0

bạn có thể đăng mã arrayAdapter của mình không. –

Trả lời

3

Đối chọn nhiều mục, bạn có thể chỉ cần sử dụng MultiAutoCompleteTextView mà là một lớp con của AutoCompleteTextView xây dựng đặc biệt cho mục đích này.

HOẶC

Nếu bạn chỉ muốn thêm một không gian ở cuối làm cho chỉ có một mục lựa chọn hơn thử điều này:

public void afterTextChanged(Editable editable) { 
    String text = editable.toString(); 
    if (shouldAddSpace && text.length() > 0 && !text.endsWith(" ")) { 
     editable.append(' '); 
    } 
} 

Edit:

Một khi không gian được nối, bạn chỉ cần gọi mAutoCompleteTextView.showDropDown(); để hiển thị lại menu thả xuống với văn bản được cập nhật.

+0

@Pinhassi đã làm việc đó cho bạn? hãy cho tôi biết nếu bạn gặp phải bất kỳ vấn đề nào ... –

+0

Điều đó có nghĩa là tôi sẽ cung cấp cho bạn tiền thưởng, nhưng tôi cũng thích con trỏ sẽ chuyển đến cuối văn bản (sau ""). –

+0

@Pinhassi xem câu trả lời cập nhật của tôi để cập nhật con trỏ và cho tôi biết nếu điều đó không hoạt động, tôi chưa thử nghiệm nhưng nó sẽ hoạt động! –

0

Tôi không chắc chắn nếu điều này sẽ giải quyết vấn đề của bạn, nhưng mAutoCompleteTextView.setText(" "); sẽ xóa văn bản. Vì vậy, tôi sẽ làm điều này:

mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().toString() + " "); 
0
mAutoCompleteTextView.setText(" "); 

Mã này đặt văn bản chế độ xem văn bản thành "" - Nội dung bạn muốn là văn bản hiện có cộng với khoảng trắng.

mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().append(" ")); 
0

Tôi thích sử dụng "MultiAutoCompleteTextView" để đạt được những gì bạn đang cố gắng làm.

<AutoCompleteTextView 
    android:id="@+id/autoCompleteTextView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="65dp" 
    android:ems="10" > 

Trong file java:

private AutoCompleteTextView actv; 
actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 

Danh sách chuỗi:

String[] countries = getResources(). 
    getStringArray(R.array.list_of_countries); 
    ArrayAdapter adapter = new ArrayAdapter 
    (this,android.R.layout.simple_list_item_1,countries); 
    actv.setAdapter(adapter); 

này danh sách ví dụ hiển thị của các nước tương ứng với người dùng nhập vào. Tôi hy vọng ví dụ này sẽ giúp ích cho công việc của bạn.

Các vấn đề liên quan