【问题标题】:AutoComplete Edittext is not showing the filtered Listview details自动完成编辑文本未显示过滤的列表视图详细信息
【发布时间】:2014-02-14 12:07:03
【问题描述】:

我的异步任务中有一个 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                          
                }
            });      
        }

我的 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;
}

  }

注意:我的主类名称是 History.java,Asynctask 名称是 HistorySoapTask。

【问题讨论】:

    标签: android android-listview android-asynctask android-adapter android-adapterview


    【解决方案1】:

    在搜索了一些博客和其他帖子后,我找到了我的问题的答案。我犯了一个错误,我没有在我的程序中实现过滤器概念,现在它工作正常。所以要过滤列表,我们应该如下定义过滤器:

    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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多