2010-08-14 6 views
16

का उपयोग करता हूं तो कॉमा को किसी स्थान के साथ प्रतिस्थापित करने के लिए कैसे करें, जब मैं कई अक्षरों को इनपुट करता हूं तो आम शब्दों को संकेत देने के लिए MultiAutoCompleteTextView का उपयोग करके मैं एक साधारण प्रोग्राम कर रहा हूं।जब मैं "मल्टीएटो कॉम्प्लेटेक्स्टव्यू"

कोड:

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

अब, जब मैं इनपुट 'एक' और चुन "एबीसीडी" लेकिन परिणाम "एबीसीडी," करने के लिए हो गया है। एक जगह के साथ अल्पविराम को कैसे बदलें?

धन्यवाद!

उत्तर

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

मैं यहाँ कुछ ऐसा कर रहा हूँ !! stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

+1

'findTokenStart' में, आप पीछे हटते हैं, फिर आगे .... एक बार की तरह दिखता है? यह क्यों? –

+1

आपको संभवत: 'न्यूलाइन और टैब इत्यादि' के साथ काम करने की बजाय कैरेक्टर.इस व्हाइटस्पेस का उपयोग करना चाहिए – SteelBytes

2

ऐसा करने का तरीका आपके Tokenizer को लागू करना होगा। कॉमा आने का कारण यह है कि आप CommaTokenizer का उपयोग कर रहे हैं, जिसे ठीक से करने के लिए डिज़ाइन किया गया है। यदि आप अपने स्पेसटोकनाइज़र को कार्यान्वित करने के लिए संदर्भ की आवश्यकता है तो आप the source code for CommaTokenizer पर भी देख सकते हैं।

+0

ओह, धन्यवाद मिल जाएगा। लेकिन जब मैं "MultiAutoCompleteTextView.java" शामिल करता हूं, तो मुझे एक त्रुटि मिलती है "com.android.internal.R को हल नहीं किया जा सकता", और मुझे यह फ़ाइल नहीं मिल सकती है ... – huaigu

+0

टोकनज़र लिंक टूटा हुआ है। – Elizeu

+0

@Daniel, क्या आप टोकननाइज़र के स्रोत कोड के लिए लिंक अपडेट कर सकते हैं? लिंक टूटा हुआ है। – tpk

1

मेरे सवाल का चैक/जवाब देने

How to replace MultiAutoCompleteTextView drop down list

आप एक SpaceTokenizer वर्ग

+0

टोकननाइज़र का उपयोग किए बिना इसे कार्यान्वित करना संभव है? मेरा मतलब है उदाहरण के लिए यदि मैं कोई कॉमा या स्पेस टोकननाइज़र नहीं चाहता हूं तो क्या स्पैन करने योग्य कार्यक्षमता उतनी ही काम करेगी? – k2ibegin

+0

आप किसी भी चरित्र के साथ विभाजक मान को बदल सकते हैं। कारण नहीं है कि आप उपयोगकर्ता टोकननाइज़र क्यों नहीं चाहते हैं, लेकिन यदि आप चाहें तो टोकननाइज़र इंस्टेंस को हटा सकते हैं। – vsm

+0

मैं अंतरिक्ष टोकननाइज़र में बदल गया, लेकिन अगर मेरी स्ट्रिंग्स (बहु ऑटो पूर्ण पाठ दृश्य में) में पहले से ही रिक्त स्थान हैं .e.g। व्यक्ति का नाम, तो क्या मुझे कुछ अन्य टोकननाइज़र लेने की ज़रूरत है या स्पेस भी इस स्कैनियरियो में ठीक काम करेगा? – k2ibegin