这里没有用CursorAdapter,而是自己继承BaseAdapter写了个适配器. 与ListView不同,AutoCompleteTextView的适配器除了继承BaseAdapter外,还要实现Filterable接口。Filterable接口中有个getFilter方法,用于获取过滤器,我们需要自己写个继承Filter的过滤器,实现数据库查询。 代码使用了androidannotations.
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import cn.jtang.discussion.R;
import cn.jtang.discussion.db.UserDB;
import cn.jtang.discussion.mode.User;
import com.googlecode.androidannotations.annotations.Bean;
import com.googlecode.androidannotations.annotations.EBean;
import com.googlecode.androidannotations.annotations.RootContext;
@EBean
public class LoginUsernameAdapter extends BaseAdapter implements Filterable {
LayoutInflater mInflater;
ArrayList users;
String key;
@RootContext
Context context;
@Bean
UserDB userDb;
DBFilter filter;
@Override
public int getCount() {
// TODO Auto-generated method stub
if (users != null && users.size() > 0) {
return users.size();
}
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return users.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (mInflater == null) {
mInflater = LayoutInflater.from(context);
}
final User user = users.get(position);
View view = mInflater.inflate(R.layout.item_actv_username, null);
TextView tv_username = (TextView) view.findViewById(R.id.tv_username);
tv_username.setText(user.getUsername());
ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
//添加点击事件
iv_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//点击后删除用户
userDb.deleteUser(user);
users.remove(position);
notifyDataSetChanged();
}
});
return view;
}
/**
* 获取过滤器
*/
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if (filter == null) {
filter = new DBFilter();
}
return filter;
}
/**
* 数据库查询过滤器
*
* @author Administrator
*
*/
private class DBFilter extends Filter {
/**
* 查询数据库
*/
@Override
protected FilterResults performFiltering(CharSequence prefix) {
// TODO Auto-generated method stub
//查询结果保存到FilterResults对象里
FilterResults results = new FilterResults();
List queryUsers = userDb.query(prefix.toString());
results.values = queryUsers;
results.count = queryUsers.size();
return results;
}
/**
* 更新UI
*/
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// TODO Auto-generated method stub
List queryUsers = (List) results.values;
//把结果读取出复制到users里
if (users == null) {
users = new ArrayList();
}
if (users.size() > 0) {
users.clear();
}
if (queryUsers != null && queryUsers.size() > 0)
for (User user : queryUsers) {
users.add(user);
notifyDataSetChanged();
}
}
}
}