Android AutoComplete Edittext未显示筛选的Listview详细信息
我的asynctask中有一个Listview,我正在设置适配器。我应该实现自动搜索完整功能。我的代码工作正常,但当我在可编辑文本视图中输入文本时,列表不会被过滤Android AutoComplete Edittext未显示筛选的Listview详细信息,android,android-listview,android-asynctask,android-adapter,android-adapterview,Android,Android Listview,Android Asynctask,Android Adapter,Android Adapterview,我的asynctask中有一个Listview,我正在设置适配器。我应该实现自动搜索完整功能。我的代码工作正常,但当我在可编辑文本视图中输入文本时,列表不会被过滤 @Override protected void onPostExecute(ArrayList<RouteTrackerUser> result) { dialog.dismiss(); if(result!=null) { //System.out.println("U
@Override
protected void onPostExecute(ArrayList<RouteTrackerUser> result)
{
dialog.dismiss();
if(result!=null)
{
//System.out.println("User with result===>"+result);
/*for(RouteTrackerUser r :result ){
System.out.println("Contents===>"+r.getStoreid()+" "+r.getStorename()+" "+r.getStorecode()+" "+r.getStoreno()+" "+r.getVisitcount());}
*/ Intent intent=getIntent();
TextView username=(TextView)findViewById(R.id.usrname);
final String sname=intent.getExtras().getString("user_name");
username.setText("Welcome, "+sname);
userList = (ListView) findViewById(R.id.historylist);
userAdapter = new HistoryAdapter(History.this, R.layout.history_visits,R.id.vcount,result);
userList.setAdapter(userAdapter);
EditText inputSearch = (EditText) findViewById(R.id.autocomplete);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
System.out.println("afafasdf"+cs);
History.this.userAdapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
@覆盖
受保护的void onPostExecute(ArrayList结果)
{
dialog.dismise();
如果(结果!=null)
{
//System.out.println(“具有结果的用户==>”+结果);
/*对于(RouteTrackerUser r:result){
System.out.println(“Contents===>”+r.getStoreid()+“”+r.getStorename()+“”+r.getStorecode()+“”+r.getStoreno()+“”+r.getVisitcount());}
*/Intent=getIntent();
TextView用户名=(TextView)findViewById(R.id.usrname);
最终字符串sname=intent.getExtras().getString(“用户名”);
username.setText(“欢迎,”+sname);
userList=(ListView)findViewById(R.id.historylist);
userAdapter=newhistoryadapter(History.this,R.layout.History\u访问,R.id.vcount,结果);
setAdapter(userAdapter);
EditText inputSearch=(EditText)findViewById(R.id.autocomplete);
inputSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3){
//当用户更改文本时
系统输出打印项次(“AFASDF”+cs);
History.this.userAdapter.getFilter().filter(cs);
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
});
}
我的customAdapter如下所示:
private static class ViewHolder {
public final TextView storename;
public final TextView storevisitcount;
public ViewHolder(TextView name, TextView count) {
this.storename = name;
this.storevisitcount = count;
}
}
public class HistoryAdapter extends ArrayAdapter<RouteTrackerUser>
{
Context context;
//EditText autocomplete;
public HistoryAdapter(Context context,int resource,int textViewResourceId,ArrayList<RouteTrackerUser> result) {
super(context,resource,textViewResourceId, result);
this.context=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView name;
TextView vcount;
final RouteTrackerUser User = getItem(position);
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.history_visits, parent, false);
name = (TextView) convertView.findViewById(R.id.sname);
vcount = (TextView) convertView.findViewById(R.id.vcount);
convertView.setTag(new ViewHolder(name, vcount));
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
viewdata(User.getUsername(),User.getUid(),User.getStoreid(),User.getStorename(),User.getStorecode(),User.getStoreno(),User.getVisitcount());
}});
} else {
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
name = viewHolder.storename;
vcount = viewHolder.storevisitcount;
}
name.setText(User.getStorename());
vcount.setText("Visit Count: "+User.getVisitcount());
return convertView;
}
}
private静态类ViewHolder{
公共最终文本视图storename;
公共最终文本视图存储访问帐户;
公共视图持有者(文本视图名称、文本视图计数){
this.storename=名称;
this.storevisitcount=count;
}
}
公共类HistoryAdapter扩展了ArrayAdapter
{
语境;
//编辑文本自动完成;
公共历史适配器(上下文上下文、int资源、int textViewResourceId、ArrayList结果){
super(上下文、资源、textViewResourceId、结果);
this.context=context;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
文本视图名称;
文本视图vcount;
最终RouteTrackerUser用户=getItem(位置);
if(convertView==null){
LayoutFlater充气机=LayoutFlater.from(上下文);
convertView=充气机。充气(R.layout.history\u访问,父项,false);
name=(TextView)convertView.findViewById(R.id.sname);
vcount=(TextView)convertView.findViewById(R.id.vcount);
setTag(新的视图持有者(名称,vcount));
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
viewdata(User.getUsername()、User.getUid()、User.getStoreid()、User.getStorename()、User.getStorecode()、User.getStoreno()、User.getVisitcount());
}});
}否则{
ViewHolder ViewHolder=(ViewHolder)convertView.getTag();
name=viewHolder.storename;
vcount=viewHolder.storevisitcount;
}
name.setText(User.getStorename());
setText(“访问次数:+User.getVisitcount());
返回视图;
}
}
注意:我的主要类名是History.java,Asynctask名称是HistorySoapTask。在搜索了几篇博客和其他文章后,我找到了问题的答案。我犯了一个错误,我没有在程序中实现过滤器概念,现在它工作正常。因此,要过滤列表,我们应该定义过滤器,如下所示:
private class OrderAdapterFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterText = (String) constraint;
FilterResults result = new FilterResults();
if(constraint != null && constraint.toString().length() > 0)
{
ArrayList<RouteTrackerUser> filt = new ArrayList<RouteTrackerUser>();
ArrayList<RouteTrackerUser> lItems = new ArrayList<RouteTrackerUser>(fullitems);
for(int i = 0, l = lItems.size(); i < l; i++)
{
RouteTrackerUser m = lItems.get(i);
if(m.getStorename().toLowerCase().contains(constraint))
filt.add(m);
}
result.count = filt.size();
result.values = filt;
}
else
{
ArrayList<RouteTrackerUser> list = new ArrayList<RouteTrackerUser>(fullitems);
result.values = list;
result.count = list.size();
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
filtered = (ArrayList<RouteTrackerUser>)results.values;
originalitems.clear();
for(int i = 0, l = filtered.size(); i < l; i++)
originalitems.add(filtered.get(i));
notifyDataSetChanged();
}
}
私有类OrderAdapterFilter扩展过滤器
{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
constraint=constraint.toString().toLowerCase();
FilterText=(字符串)约束;
FilterResults结果=新的FilterResults();
if(constraint!=null&&constraint.toString().length()>0)
{
ArrayList filt=新的ArrayList();
ArrayList lItems=新的ArrayList(fullitems);
对于(int i=0,l=lItems.size();i