Android AutoComplete Edittext未显示筛选的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

我的asynctask中有一个Listview,我正在设置适配器。我应该实现自动搜索完整功能。我的代码工作正常,但当我在可编辑文本视图中输入文本时,列表不会被过滤

@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