2012-05-30 13 views
5

Mam ListView. Każdy jego wiersz zawiera 3 TextView i 2 Button. Powyżej mam EditText. Jak mogę filtrować mój ListView przez wartość w pierwszym TextView każdego wiersza?Wyszukiwanie w ListView z EditText

+0

http://samir-mangroliya.blogspot.in/2012/05/android-sectioned-listview-with-search_6865.html –

+0

Sprawdź to: [Android -Search listview] (http://stackoverflow.com/a/5180156/379693) –

+0

zmiana "serach" na "szukaj" dla lepszego odniesienia – Tschegewara

Odpowiedz

2

stworzyć jakąś listę tablicy dla ListView ..i na "AddTextChangeListener" można wyszukać podobne pozycje na liście i załaduj nową listę tablic dla th e wyszukiwany tekst ...

edittext.addTextChangedListener(new TextWatcher(){ 
public void afterTextChanged(Editable s) { 
    //search for the keyword and add the items to a new arraylist 
} 
1

Poniższy kod używa niestandardowej karty list.

Mam 3 widoki tekstu wyświetlane przy użyciu niestandardowej karty list. Zrobiłem próbkę, która wyszukuje na podstawie danych wejściowych w editext na górze listy. Na podstawie porównania danych wejściowych dokonuje się danych w widoku tekstowym1 każdego wiersza, a dane są filtrowane i wyświetlane odpowiednio.

Możesz mieć inne pozycje w wierszu widoku listy, a wyszukiwanie może być oparte na texview1/textview2 lub textview3. Zmodyfikuj poniżej zgodnie z Twoimi potrzebami.

public class MainActivity extends Activity { 
ArrayList<NewData> mTemp=new ArrayList<NewData>(); 
ArrayList<NewData> mPostingData=new ArrayList<NewData>(); 
ArrayList< NewData> mOri = new ArrayList<NewData>(); 

Myadapter ma; 
EditText search; 

NewData nd; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    for(int i = 0; i < 20; i++) 
    { 

     nd=new NewData(); 

     nd.newDatacus.put(NewData.TAG_CUSTOMER_CODE, "i"+i); 
     nd.newDatacus.put(NewData.TAG_CUSTOMER_NAME, "a"+i); 
     nd.newDatacus.put(NewData.TAG_CUSTOMER_MOBILE, "number"); 
     nd.newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS, "address"); 
     mOri.add(nd); 
    } 

    ma= new Myadapter(MainActivity.this); 
    mPostingData=mOri; 
    mTemp=mOri; 
    ListView lv= (ListView) findViewById(R.id.list); 
    lv.setAdapter(ma); 
    search= (EditText) findViewById(R.id.search); 
    search.addTextChangedListener(new TextWatcher() { 

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

     } 

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


     } 

     public void afterTextChanged(Editable s) { 
     } 
    }); 


} 



class Myadapter extends ArrayAdapter 
{ 
    LayoutInflater mInflater; 


    public void setData(ArrayList<NewData> mPpst) { 
     mPostingData = mPpst;//contains class items data. 
    } 

    @Override 
    public Filter getFilter() { 
     return new Filter() { 
      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       if (results != null && results.count >= 0) { 
        setData((ArrayList<NewData>) results.values);//if results of search is null set the searched results data 
       } else { 
        setData(mOri);// set original values 
       } 

       notifyDataSetInvalidated(); 
      } 



      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults result = new FilterResults(); 
       if (!TextUtils.isEmpty(constraint)) { 
        constraint = constraint.toString().toLowerCase(); 
        ArrayList<NewData> foundItems = new ArrayList<NewData>(); 
        if(mTemp!=null) 
        { 
         for(int i=0;i<mTemp.size();i++) 
         { 

          if (mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString().contains(constraint)) { 
           System.out.println("My datas"+mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString()); 
           foundItems.add(mTemp.get(i)); 

          } 
          else 
          { 

          } 
         } 
        } 
        result.count = foundItems.size();//search results found return count 
        result.values = foundItems;// return values 
       } 
       else 
       { 
        result.count=-1;// no search results found 
       } 


       return result; 
      } 
     }; 
    } 
    public Myadapter(Context context) { 
     super(context, 0); 
     mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mPostingData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 


     if(mOri == null){ 

      return null; 
     } 
     // When convertView is not null, we can reuse it directly, there is no need 
     // to reinflate it. We only inflate a new View when the convertView supplied 
     // by ListView is null. 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list, null); 
      convertView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
      // Creates a ViewHolder and store references to the two children views 
      // we want to bind data to. 
      holder = new ViewHolder(); 
      holder.t1=(TextView) convertView.findViewById(R.id.textView1); 
      holder.t2 = (TextView) convertView.findViewById(R.id.textView2); 
      holder.t3 = (TextView) convertView.findViewById(R.id.textView3); 

      convertView.setTag(holder); 
     } else { 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.t1.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString()); 
     holder.t2.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_NAME).toString()); 
     holder.t3.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_MOBILE).toString()); 
     return convertView; 
    } 
} 
class ViewHolder 
{ 
    TextView t1,t2,t3; 
} 

Main.xml

<?xml version="1.0" encoding="utf-8"?> 

<EditText 
    android:id="@+id/search" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

List.xml // xml nadmuchać

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dp" 
    android:text="TextView" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dp" 
    android:text="TextView" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dp" 
    android:text="TextView" /> 

klasa NewData

public class NewData { 
    public static final String TAG_CUSTOMER_CODE = "customer_code"; 
    public static final String TAG_CUSTOMER_NAME = "customer_name"; 
    public static final String TAG_CUSTOMER_MOBILE = "customer_mobile"; 
    public static final String TAG_CUSTOMER_ADDRESS = "customer_address"; 

    Hashtable newDatacus=new Hashtable(); 

    public NewData() 
    { 

    newDatacus.put(NewData.TAG_CUSTOMER_CODE,new String()); 
    newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String()); 
    newDatacus.put(NewData.TAG_CUSTOMER_NAME,new String()); 
    newDatacus.put(NewData.TAG_CUSTOMER_MOBILE,new String()); 
    newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String()); 




} 
} 
+0

wypróbuj powyższy kod i odpowiednio go zmodyfikuj – Raghunandan