I went through exactly this lesson ( http://www.androidbegin.com/tutorial/android-search-listview-using-filter/ ), but the UsersBackUp array is still zero, i.e. at initialization it is not filled.

public class ListViewAdapter extends BaseAdapter { Context mContext; LayoutInflater inflater; private List<UserDetails> Users = null; private ArrayList<UserDetails> UsersBackUp; public ListViewAdapter(List<UserDetails> Users, Context context) { mContext = context; this.Users = Users; inflater = LayoutInflater.from(mContext); this.UsersBackUp = new ArrayList<UserDetails>(); this.UsersBackUp.addAll(Users); } public class ViewHolder { TextView Name; TextView Online; } @Override public int getCount() { return Users.size(); } @Override public Object getItem(int i) { return Users.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup parent) { final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.list_view_item, null); // Locate the TextViews in listview_item.xml holder.Name= (TextView) view.findViewById(R.id.textView); holder.Online = (TextView) view.findViewById(R.id.textView2); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.Name.setText(Users.get(i).getUsername()); if (Users.get(i).getOnline()) { holder.Online.setText("Онлайн"); } else { holder.Online.setText("Оффлайн"); } return view; } public void filter(String charText) { charText = charText.toLowerCase(Locale.getDefault()); Users.clear(); if (charText.length() == 0) { Users.addAll(UsersBackUp); Log.d("myLog null ", UsersBackUp.size() + " size"); } else { Log.d("myLog ", " yes"); for (UserDetails wp : UsersBackUp) { if (wp.getUsername().toLowerCase(Locale.getDefault()).contains(charText)) { Log.d("myLog ", wp.getUsername() + " username"); Users.add(wp); } } } notifyDataSetChanged(); } } 

Structure

 public class UserDetails { private String Username; private String Token; private String Id; private Boolean Online; public UserDetails(String Username, String Token, String Id, String Online) { this.Username = Username; this.Token = Token; this.Id = Id; this.Online = Boolean.valueOf(Online); } public String getUsername() { return this.Username; } public String getToken() { return this.Token; } public String getId() { return this.Id; } public Boolean getOnline() { return this.Online; } } 
  • you need a code where you call new ListViewAdapter (Users, context) and populate the original Users list itself. Perhaps just one is done before the other. - Ruslan P.
  • It really helped, thanks :) - Andrew

0