0

Я хочу сделать пользовательский AutoCompleteView как это ..Пользовательские AutoCompletevView как facebook поле для комментариев в Android

enter image description here

Он должен быть заполнен, когда добавляется мой специальный символ (например, Facebook .. Когда вы набираете @B то все друзья, имена которых начинаются с «B», будут заполнены, и мы можем выбрать имя).

Он не должен заполняться при вводе текста, пока не будет добавлено «@».

Когда добавлено «@», автозаполнение сбрасывается, и мы можем выбрать имя и после его выбора будет добавлено.

enter image description here

this я нашел, но не удовлетворены. Мне нужна подсказка. Они реализованы ... например, когда вы печатаете «@» выпадающее меню. Но мне нужно настроить больше. Сейчас мне нужна помощь, если у других есть идея или какой-либо завершенный источник.

Я должен попробовать себя, но позвольте мне спросить, прежде чем внедрять пользовательское представление, чтобы сэкономить мое время.

ответ

2

Вам необходимо сделать пользовательское автозаполнение, расширив класс .. и код, указанный в вашем вопросе, который необходимо изменить.

public class CustomAutoComplete extends AutoCompleteTextView { 
private String previous = ""; 
private String seperator = "@"; 
boolean isState = false; 

public CustomAutoComplete(final Context context, final AttributeSet attrs, 
     final int defStyle) { 
    super(context, attrs, defStyle); 
    this.setThreshold(1); 

} 

public CustomAutoComplete(final Context context, final AttributeSet attrs) { 
    super(context, attrs); 
    this.setThreshold(1); 
} 

public CustomAutoComplete(final Context context) { 
    super(context); 
    this.setThreshold(1); 
} 

/** 
* This method filters out the existing text till the separator and launched 
* the filtering process again 
*/ 
@Override 
protected void performFiltering(final CharSequence text, final int keyCode) { 
    String filterText = text.toString().trim(); 
    String lastchar = filterText.substring(filterText.length() - 1, 
      filterText.length()); 
    if (filterText.length() == 1) { 
     if (lastchar.equals(seperator)) { 
      isState = true; 
     } else { 
      isState = false; 
     } 
    } 
    previous = filterText.substring(0, 
      filterText.lastIndexOf(getSeperator()) + 1); 

    filterText = filterText.substring(filterText 
      .lastIndexOf(getSeperator()) + 1); 

    if ((lastchar.equals(seperator)) || isState) { 
     super.performFiltering(filterText, keyCode); 

     isState = true; 

    } 
} 

/** 
* After a selection, capture the new value and append to the existing text 
*/ 
@Override 
protected void replaceText(final CharSequence text) { 
    isState = false; 
    super.replaceText(previous + text);// + getSeperator()); 

} 

public String getSeperator() { 
    return seperator; 
} 

public void setSeperator(final String seperator) { 
    this.seperator = seperator; 
} 

} 

Надеется, что это поможет ...

+0

Будет делать .. Спасибо .. позвольте мне изменить и расширить подробнее .. –

+0

Этот код Не работает – hitesh

0

Вы можете добиться этого с помощью MultiAutoCompleteTextView. Просто реализуйте свой собственный класс Tokenizer, и он работает. Для упоминания я написал класс, который вы можете использовать.

package howdysam.com.howdysuggesttext; 

import android.text.SpannableString; 
import android.text.Spanned; 
import android.text.TextUtils; 
import android.widget.MultiAutoCompleteTextView; 


public class AtTokenizer implements MultiAutoCompleteTextView.Tokenizer { 

    @Override 
    public int findTokenStart(CharSequence text, int cursor) { 
     int i = cursor; 

     while (i > 0 && text.charAt(i - 1) != '@') { 
      i--; 
     } 
     while (i < cursor && text.charAt(i) == '@') { 
      i++; 
     } 

     return i; 
    } 

    @Override 
    public int findTokenEnd(CharSequence text, int cursor) { 
     int i = cursor; 
     int len = text.length(); 

     while (i < len) { 
      if (text.charAt(i) == '@') { 
       return i; 
      } else { 
       i++; 
      } 
     } 

     return len; 
    } 

    @Override 
    public CharSequence terminateToken(CharSequence text) { 
     int i = text.length(); 

     while (i > 0 && text.charAt(i - 1) == '@') { 
      i--; 
     } 

     if (i > 0 && text.charAt(i - 1) == '@') { 
      return text; 
     } else { 
      if (text instanceof Spanned) { 
       SpannableString sp = new SpannableString(text + "@"); 
       TextUtils.copySpansFrom((Spanned) text, 0, text.length(), 
         Object.class, sp, 0); 
       return sp; 
      } else { 
       return text; 
      } 
     } 
    } 
} 

Тогда на разделе Вид (активность или фрагмент) вместо делать

edit.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 

сделайте следующее

edit.setTokenizer(new AtTokenizer()); 

Он работает.

Смежные вопросы