2010-08-14 7 views
16

Birden çok harf girdiğimde genel sözcükleri sormak için MultiAutoCompleteTextView kullanarak basit bir program yapıyorum."MultiAutoCompleteTextView" kullandığımda boşlukla virgül nasıl değiştirilir

kodu: Ben girdi 'a' ve seçim "abcd" ancak sonuç "abcd" haline

Şimdi
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      this, 
      android.R.layout.simple_dropdown_item_1line, 
      ary); 
    MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.editText); 
    textView.setAdapter(adapter); 

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

    private String[] ary = new String[] { 
     "abc", 
     "abcd", 
     "abcde", 
     "abcdef", 
     "abcdefg", 
     "hij", 
     "hijk", 
     "hijkl", 
     "hijklm", 
     "hijklmn", 
    }; 

. Bir boşluk ile virgül nasıl değiştirilir?

Teşekkür ederiz!

cevap

40
public class SpaceTokenizer implements Tokenizer { 

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; 
} 

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; 
} 

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 + " "; 
    } 
} 
} 
} 
+0

BURADA benzer bir şey yapıyorum! stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

+1

'findTokenStart' içinde, geri, sonra ileriye doğru iterate ... bir kez gibi görünüyor? Neden böyle? –

+1

Muhtemelen Character.isWhitespace'i, '' newline ve sekmeler vb. Ile çalıştığı şekilde karşılaştırmak yerine kullanmak zorundasınızdır. – SteelBytes

2

Bunu yapmanın yolu, kendi Tokenizer'u uygulamak olacaktır. Virgülün ortaya çıkmasının nedeni, tam olarak bunu yapmak için tasarlanmış olan CommaTokenizer kullanıyor olmanızdır. Kendi SpaceTokenizer'ınızı nasıl uygulayacağınıza dair bir referansa ihtiyacınız varsa, the source code for CommaTokenizer'a da bakabilirsiniz.

+0

ah, teşekkür ederim bulacaksınız cevap. Ama "MultiAutoCompleteTextView.java" eklediğinizde, "com.android.internal.R çözümlenemedi" hatasıyla karşılaşıyorum ve bu dosyayı bulamıyorum ... – huaigu

+0

Tokenizer bağlantısı bozuk. – Elizeu

+0

@Daniel, Tetikleyici kaynak kodu bağlantısını günceller misiniz? bağlantı bozuk. – tpk

1

/sorumu kontrol

How to replace MultiAutoCompleteTextView drop down list

Bir SpaceTokenizer sınıfı

+0

Bunu belirteci kullanmadan uygulamak mümkün mü? Örneğin, tokenizer olarak herhangi bir virgül veya boşluk istemediğimde, yazım işlevselliği olduğu gibi çalışacak mı? – k2ibegin

+0

Ayırıcı değerini istediğiniz herhangi bir karakterle değiştirebilirsiniz. Kullanıcı belirteci neden istemediğinizi bilmiyorsunuz, ancak isterseniz belirteçler örneğini kaldırabilirsiniz. – vsm

+0

Alan belirtecini değiştirdim, ancak çiziklerim (çoklu otomatik tam metin görünümünde) zaten boşluk varsa .e.g. kişi adı, daha sonra başka bir tokenizer almam gerek VEYA alan da bu scnearioda iyi çalışacak mı? – k2ibegin