我在Android中創建了一個「搜索」框。當我嘗試搜索任何內容時,它不會在列表中顯示更新的值。值將進入列表,但搜索相關值不會更改。這裏是我的快照:在listView中創建SearchBox
如果我輸入「AB」它的正常工作,但是當我把「S」,它顯示這樣的第一ListView項:
這裏是我的片段課堂,我使用addTextChangeListener
:
etSearchUser.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (i2<i1){
adapter.resetData();
}
adapter.getFilter().filter(charSequence);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
這裏是我的適配器類別:
public class RemoveUserAdapter extends BaseAdapter implements Filterable {
private ArrayList<UserModel> listcontent;
private ArrayList<UserModel> searchList;
Context context;
private Filter planetFilter;
UserModel content, content1;
LayoutInflater inflater;
public RemoveUserAdapter(Context context, ArrayList listContent) {
this.context = context;
this.listcontent = listContent;
this.searchList = listContent;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return listcontent.size();
}
@Override
public Object getItem(int i) {
return listcontent.get(i);
}
@Override
public long getItemId(int i) {
return listcontent.get(i).hashCode();
}
class ViewHolder {
private TextView tvEmail, tvUserId;
private CheckBox checkBox;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
final ViewHolder viewHolder, viewHolder1;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.remove_user_adapter, null);
viewHolder = new ViewHolder();
viewHolder.tvEmail = (TextView) view.findViewById(R.id.tvEmailUser);
viewHolder.tvUserId = (TextView) view.findViewById(R.id.tvUserGroup);
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);
viewHolder.checkBox.setVisibility(View.INVISIBLE);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
content = (UserModel) listcontent.get(i);
content = (UserModel) searchList.get(i);
//Log.i("@@@",content.getEmail()+" email");
viewHolder.tvEmail.setText(content.getEmail());
viewHolder.tvUserId.setText(content.getUsergroup());
return view;
}
public void resetData() {
listcontent = searchList;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence charSequence, FilterResults result) {
listcontent = (ArrayList<UserModel>) result.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<UserModel> FilteredArrList = new ArrayList<UserModel>();
if (searchList == null) {
searchList = new ArrayList<UserModel>(listcontent);
}
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = searchList.size();
results.values = searchList;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < searchList.size(); i++) {
content = (UserModel) searchList.get(i);
String data = content.getEmail();
String user = content.getUserId();
if (data.toLowerCase().startsWith(constraint.toString())) {
FilteredArrList.add(new UserModel(data, user));
}
}
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
}
對於搜索我使用的是簡單的EditText。
還有一件事是它從Gmail的第一個字母開始搜索。 我想隨機搜索。
例如:[email protected]
是否存在,如果我在搜索框「gmail」中輸入它應該顯示結果。
這裏是我的usermodel類:
public class UserModel {
private String usergroup;
private String name;
private String email;
private String phone;
private String password;
private String userId;
public UserModel(String email, String userGroup) {
super();
this.email = email;
this.usergroup = userGroup;
}
public UserModel(){}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsergroup() {
return usergroup;
}
public void setUsergroup(String usergroup) {
this.usergroup = usergroup;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
取代你data.toLowerCase()startsWith(constraint.toString())與data.toLowerCase()包含( constraint.toString()) –