2012-04-27 18 views
5

इम के माध्यम से ListView फिल्टर करने के लिए और मैं किताब लेकिन हर है कि आप edittext में एक शब्द या वाक्य डाल यह पुस्तकों की सामग्री खोज करेंगे के शीर्षक फ़िल्टर करना चाहते हैं कैसे ... किसी ने मुझे इस के साथ मदद कर सकते हैं ...एंड्रॉयड के लिए आवेदन की तरह एक eBook बनाने EditText

+0

इस पोस्ट को देख http://stackoverflow.com/questions/1645209/ कैसे-कर सकते हैं-ए-फिल्टर-सूचीदृश्य-डेटा-जब टाइपिंग-ऑन-edittext में एंड्रॉयड –

+0

मैं थोड़ी देर के लिए इस पर अटक गया था, और कुछ उत्तर खुलकर जटिल पाया है, तो अंत में एक सरल जवाब यहां पोस्ट: http://stackoverflow.com/questions/ 17720481/कैसे-सका-ए-फिल्टर-सूचीदृश्य-का उपयोग कर-baseadapter/36032382 # 36032382 –

उत्तर

0

आप edittext के लिए लिखने textChangedlistener (या) TextWatcher की जरूरत है। श्रोता के अंदर आपको खोज तर्क लिखने की आवश्यकता है। यहां APIdoc है। यहां textwatcher पर एक उदाहरण दिया गया है।

+0

मैं पहले से ही उस विषय के सभी देखा था, लेकिन इसकी एक नहीं im की तलाश में .. यदि आप जानते हैं आप कृपया मुझे एक चल रहे प्रोग्राम भेज सकते हैं तो मैं देख सकता हूं कि यह करने के लिए उचित है .. धन्यवाद – Mordiggian

14

यह एक कोशिश है, जब भी यू edittext में पाठ दर्ज करें, सूची से फ़िल्टर परिणाम दिखाई देंगे के रूप में मैं छवियों में सामान

प्रारंभिक से पता चला है:

Initial

छानने :

Filtered:
इस main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<EditText 
    android:id="@+id/etSearchbox" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
<ListView 
    android:id="@+id/lvFirst" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    ></ListView>  

</LinearLayout> 

है इस FilterListActivity.java

package com.filterlist; 

import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 

public class FilterListActivity extends Activity{ 

EditText etSearchbox; 
ListView lvFirst; 
ArrayAdapter<String> adapter1; 
String[] data = {"mehul joisar","amit mishra","amitabh","Aamir khan","jesica","katrina"}; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

etSearchbox=(EditText)findViewById(R.id.etSearchbox); 
lvFirst=(ListView)findViewById(R.id.lvFirst); 
lvFirst.setTextFilterEnabled(true); 

adapter1 = new ArrayAdapter<String>(FilterListActivity.this, android.R.layout.simple_list_item_1, data); 
lvFirst.setAdapter(adapter1); 

etSearchbox.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
     // TODO Auto-generated method stub 
     FilterListActivity.this.adapter1.getFilter().filter(arg0); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
      int arg3) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable arg0) { 
     // TODO Auto-generated method stub 

    } 
}); 




} 
} 
+0

यह बहुत अच्छा है! लेकिन मैं इसे थोड़ा अलग करना चाहता हूं। मेरे पास शीर्ष 10 cties की सूची के लिए एक एडाप्टर है (यह एक स्थिर सूची है)। अब जब उपयोगकर्ता edittext बॉक्स में टाइप करता है, तो मैं अपने पास शहरों की दूसरी सूची से फ़िल्टर चाहता हूं। मैं उसे कैसे प्राप्त कर सकता हूं? – Namratha

+0

ok.let मुझे पता है कि आप शहरों की अन्य सूची से फ़िल्टर करने के बाद फ़िल्टर किए गए परिणाम कहां प्रदर्शित करना चाहते हैं? –

4

है मैं एक काम उदाहरण है, इस प्रयास करें:

filterEditText = (EditText)findViewById(R.id.filter); 
filterEditText.addTextChangedListener(filterTextWatcher); 

TextWatcher filterTextWatcher = new TextWatcher() { 

     public void beforeTextChanged(CharSequence s, int start, int count,int after) { 

     } 
     public void onTextChanged(CharSequence s, int start, int before,int count) { 
      adapter.getFilter().filter(s); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub    
     } 
    }; 

एडाप्टर चाहिए implements Filterable

  @Override 
      public Filter getFilter() { 
//    Filter filter = null; 

       if(filter == null) 
        filter = new CheeseFilter(); 
       return filter; 
      } 

और फिल्टर वर्ग:

 public class CheeseFilter extends Filter { 

      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       // TODO Auto-generated method stub 

       constraint = constraint.toString().toLowerCase(); 

       FilterResults newFilterResults = new FilterResults(); 

       if (constraint != null && constraint.length() > 0) { 


        ArrayList<String> auxData = new ArrayList<String>(); 

        for (int i = 0; i < data.size(); i++) { 
         if (data.get(i).toLowerCase().contains(constraint)) 
          auxData.add(data.get(i)); 
        } 

        newFilterResults.count = auxData.size(); 
        newFilterResults.values = auxData; 
       } else { 

        newFilterResults.count = data.size(); 
        newFilterResults.values = data; 
       } 

       return newFilterResults; 
      } 

      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 

       ArrayList<String> resultData = new ArrayList<String>(); 

       resultData = (ArrayList<String>) results.values; 

       EfficientAdapter adapter = new EfficientAdapter(context, resultData); 
       list.setAdapter(adapter); 

//    notifyDataSetChanged(); 
      } 

     } 

आप अधिक जानकारी के लिए इस पोस्ट की जाँच कर सकते हैं:

Filter expandableList

Filter ListView