2017-03-23 4 views
0

Ich habe eine Listenansicht erstellt, die mit Adapter anpassen und ich möchte die Listenansicht filtern, indem Sie Editiertext eingeben. Allerdings fand ich es schwierig, da ich alle Daten von Firebase bekomme. Wie kann ich die Daten nach Namen filtern? Welchen Code muss ich hinzufügen?ListView Filterdaten in Edittext

Es ist meine Haupttätigkeit

private void readFirebaseData() { 
    FirebaseDatabase.getInstance().getReference("account").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       uid = (String) snapshot.child("uid").getValue(); 
       contactNo = (String) snapshot.child("contactNo").getValue(); 

       email = (String) snapshot.child("email").getValue(); 
       name = (String) snapshot.child("name").getValue(); 

       Shop shops = new Shop(uid, contactNo, email, name); 
       shopListAdapter adapter = new shopListAdapter(getActivity(), shop); 
       adapter.add(shops); 


       listView.setAdapter(adapter); 
       adapter.notifyDataSetChanged(); 
      } 
     } 



} 
private void filter() { 
    searcher.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

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

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
} 

Es ist meine Adapter-Klasse ist

public class shopListAdapter extends ArrayAdapter<Shop> { 

private ArrayList<Shop> shops; 
Filter filter; 

public shopListAdapter(Context context, ArrayList<Shop> shops) { 
    super(context, 0, shops); 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    Shop shops = getItem(position); 

    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.item, parent, false); 
    } 

    TextView name = (TextView) convertView.findViewById(R.id.txtName); 
    TextView address = (TextView) convertView.findViewById(R.id.txtAdd); 

    name.setText(shops.getShopName()); 
    address.setText(shops.getAddress()); 


    return convertView; 
} 

Antwort

0

Plz versuchen diese .Ur laufenden Code falsch sind Somethings

public class MyLeadsAdapter extends ArrayAdapter<MyleadsListModel> { 

private Vector<MyleadsListModel> originalList; 
private Vector<MyleadsListModel> numberList; 
private CountryFilter filter; 
private Context context; 
public MyLeadsAdapter(Context context, int textViewResourceId, Vector<MyleadsListModel> numberList) { 
    super(context, textViewResourceId, numberList); 
    this.context = context; 
    this.numberList = new Vector<MyleadsListModel>(); 
    this.numberList.addAll(numberList); 
    this.originalList = new Vector<MyleadsListModel>(); 
    this.originalList.addAll(numberList); 
} 

@Override 
public Filter getFilter() { 
    if (filter == null) { 
     filter = new CountryFilter(); 
    } 
    return filter; 
} 


@Override 
public View getView(final int position, View convertView, 
        ViewGroup parent) { 

    // TODO Auto-generated method stub 
    final MyViewHolder mViewHolder; 

    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.row_my_leads, 
       null); 

     convertView.setTag(mViewHolder); 

    } else { 
     mViewHolder = (MyViewHolder) convertView.getTag(); 
    } 



    return convertView; 

} 

class MyViewHolder { 

} 

private class CountryFilter extends Filter { 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 

     constraint = constraint.toString().toLowerCase(); 
     FilterResults result = new FilterResults(); 
     if (constraint != null && constraint.toString().length() > 0) { 
      Vector<MyleadsListModel> filteredItems = new Vector<MyleadsListModel>(); 

      for (int i = 0, l = originalList.size(); i < l; i++) { 
       MyleadsListModel contactList = originalList.get(i); 
       if (contactList.getName().toString().toLowerCase() 
         .contains(constraint)) 
        filteredItems.add(contactList); 
      } 
      result.count = filteredItems.size(); 
      result.values = filteredItems; 
     } else { 
      synchronized (this) { 
       result.values = originalList; 
       result.count = originalList.size(); 
      } 
     } 
     return result; 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void publishResults(CharSequence constraint, 
            FilterResults results) { 
     numberList = (Vector<MyleadsListModel>) results.values; 
     notifyDataSetChanged(); 
     clear(); 
     for (int i = 0, l = numberList.size(); i < l; i++) 
      add(numberList.get(i)); 
     notifyDataSetInvalidated(); 
    } 
} 

}

hinzufügen

Fügen Sie diesen Code hinzu für Edientext:

searcher.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

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

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 
+0

also wenn ich daten von firebase füge ich füge es in Vector? – kings077712

+0

U kann Vector oder Array-Liste verwenden. – Prosanto

+0

es funktioniert nicht können Sie ein wenig mehr erklären oder meinen Code verwenden? – kings077712

Verwandte Themen