2012-02-23 13 views
5

मैं को EditText बॉक्स का उपयोग करके और एडाप्टर getFilter() फ़ंक्शन का उपयोग करके फ़िल्टर करना चाहता हूं। जब तक मैं टेक्स्ट बॉक्स में स्पेस कैरेक्टर नहीं डालता तब तक यह ठीक काम करता है।एंड्रॉइड लिस्ट व्यू के लिए फ़िल्टर करें - स्पेस कैरेक्टर

संपादित करें: अगर मैं टाइप "सेब" यह सब वापस आ जाएगी { "एप्पल", "केले", "रेड एप्पल"} : यह एक SimpleAdapter ArrayAdapter नहीं

है मेरी सूची में इन शब्द होते हैं इसमें सेब शब्द युक्त ऐप्पल (ऐप्पल और रेड ऐप्पल)। यदि मैं "सेब" टाइप करता हूं तो यह कुछ भी वापस नहीं करेगा।

कोई विचार?

searchBox = (EditText) findViewById(R.id.searchBox); 

searchBox.addTextChangedListener(filterTextWatcher); 

और

private TextWatcher filterTextWatcher = new TextWatcher() { 

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub   
} 

public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    // TODO Auto-generated method stub   
} 

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    myAdapter.getFilter().filter(s.toString()); 
} 
}; 
+0

क्या आपने कभी यह पता लगाया है? –

+0

मुझे खेद नहीं है। मुझे लगता है कि समाधान ऐरे एडाप्टर के आधार पर अपना एडाप्टर बनाना हो सकता है लेकिन मैंने कोशिश नहीं की है (उस प्रोजेक्ट पर काम करना बंद कर दिया है)। – Chris911

+0

@CaptainProg आप किस प्रकार का उत्तर खोज रहे हैं? 'Trim() 'का उपयोग करके उत्पन्न मूल प्रश्न के साथ सबसे अच्छा जवाब है। – Sam

उत्तर

2

SimpleAdapter से छानने कार्यक्षमता आपके छानने आवश्यकताओं को पूरा नहीं करता है, तो आप को ओवरराइड करने की आवश्यकता होगी SimpleAdapter और अपनी खुद की फ़िल्टरिंग आवश्यकताओं को लागू करें।

इसके लिए बहुत सारे कोड की आवश्यकता है, क्योंकि SimpleAdapter में फ़िल्टर बहुत सारी निजी वस्तुओं का उपयोग कर रहा है, आपको दोहराने की आवश्यकता होगी। ArrayAdapter

सौभाग्य से, किसी और (@ uʍop ǝpısdn) पहले से ही प्रक्रिया में गया, कोड लिखा और इसे समुदाय के लिए उपलब्ध कराया।

आप ब्लॉग here पर लिंक का उपयोग कर सकते हैं जिसमें उदाहरणों का उपयोग करना और here में कोड शामिल है।

सम्मान।

+0

मुझे लगता है कि यह एकमात्र वैध समाधान है। थोड़ी देर के बाद से मैंने इस सवाल से पूछा और मैं अब उस परियोजना पर काम नहीं कर रहा हूं लेकिन मैं मान्य करने की कोशिश करूंगा। धन्यवाद। – Chris911

+0

बिल्कुल। वर्णित समस्या इस पंक्ति के कारण उत्पन्न होती है: 'स्ट्रिंग [] शब्द = str.split (" "); '** सरल एडाप्टर। सिंपलफिल्टर ** कक्षा, जो आपके शुरुआती स्ट्रिंग्स से रिक्त स्थान को छोड़ देता है, उन्हें शब्दों में विभाजित करता है। –

+0

@Luis मुझे एक ही समस्या है और मैंने एक प्रश्न http: // stackoverflow पोस्ट किया है।com/प्रश्न/39573432/get-filter-do-not-work-for-space-in-android मुझे उम्मीद है कि आप मदद कर सकते हैं। – AndroidNewBee

2

इस प्रयोग करके देखें:: यहाँ कोड है

myAdapter.getFilter().filter(s.toString().trim()); 
+0

यह केवल आंशिक रूप से काम करता है क्योंकि यह रिक्त स्थान हटा देता है लेकिन मान लें कि मैं "लाल एपी" टाइप करता हूं, यह इसे "RedAp" पर ट्रिम कर देगा और मेरे चयन में "RedAp" शब्द नहीं है। तो मूल रूप से यह समस्या को ठीक करता है अगर मैं एक शब्द के पहले या बाद में एक "" डालता हूं लेकिन परिणाम नहीं देता हूं। – Chris911

+2

@ क्रिस 9 11: यह वास्तव में नहीं होगा। स्ट्रीमिंग का मतलब है, यह पाठ शुरू होने से पहले और बाद में स्थान को हटा देता है और क्रमशः बंद हो जाता है। इसलिए यदि आप "सेब" टाइप करेंगे तो यह इसे "सेब" के रूप में ट्रिम कर देगा, लेकिन यदि आप " लाल एपी ", यह इसे ले जाएगा। बिंदु पर बात करें? – Hiral

+0

स्पष्टीकरण हिरल के लिए धन्यवाद लेकिन यह अभी भी समस्या को ठीक नहीं करता है। मुझे लगता है कि ऐसा करने का एकमात्र तरीका है अपने स्वयं के फ़िल्टर के साथ अपने स्वयं के एडाप्टर को लागू करना। – Chris911

संबंधित मुद्दे