【问题标题】:Adding a permanent search title in autocomplete textview android在自动完成文本视图 android 中添加永久搜索标题
【发布时间】:2012-12-06 15:14:10
【问题描述】:

我想在 android 的自动完成文本视图中添加一个永久搜索结果。 例如:如果我在自动完成中输入“x”并且它显示酒店列表...xyz1、xyz2.etc...那么最后一个结果必须是“不在列表中”值。如果用户找不到他们的酒店,那么他们可以选择 NOT IN LIST 选项..

即使用户输入了预测搜索无法给出的文本,那么“不在列表中”应该是自动完成应该给出的唯一建议。我是Android新手。我正在做一个小应用程序。请帮助..如果我必须使用自定义自动完成文本视图,那么我应该覆盖什么方法?如果是这样,请用我必须重写的方法代码告诉我

【问题讨论】:

  • AutoCompleteTextView 使用哪种适配器?
  • 我使用 arrayadapter..它是从本地 json 文件 local json(parse)-->String array-->arrayadapter

标签: android default custom-component autocompletetextview


【解决方案1】:

这是我在我的一个应用程序中使用的AutoCompleteAdapter。希望能解决你的问题

将适配器从下方设置为您的AutoCompleteTextView 控件:

    ArrayAdapter<String> adapter = new AutoCompleteAdapter(this,
            R.layout.dropdown_item);

    autoComplete.setAdapter(adapter);

示例适配器:

private class AutoCompleteAdapter extends ArrayAdapter<String>
        implements Filterable {
    private ArrayList<String> mData;

    public AutoCompleteAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        mData = new ArrayList<String>();
    }

    @Override
    public int getCount() {
        try {
            return mData.size();
        } catch (NullPointerException e) {
            return 0;
        }
    }

    @Override
    public String getItem(int index) {
        return mData.get(index);
    }

    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    //This shows a progress to the user in my app. you don't need to use this
                    handle.sendEmptyMessage(MSG_SHOW_PROGRESS);
                    try {
                        //Fill mData with your data
                        mData = XmlParser.searchLocations(constraint
                                .toString());
                    } catch (Exception e) {
                        handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                    }
                    mData.add("NOT IN LIST");
                    filterResults.values = mData;
                    filterResults.count = mData.size();
                }
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence contraint,
                    FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                    handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                } else {
                    notifyDataSetInvalidated();
                    handle.sendEmptyMessage(MSG_HIDE_PROGRESS);
                }
            }
        };
        return myFilter;
    }
}

【讨论】:

  • @user1879614 上面贴的代码总是会在搜索结果中添加“NOT IN LIST”,这不是你要求的吗?
  • 你知道我是安卓新手。我尝试了最后一个小时左右并得到它......对不起:(因为是一个白痴。非常感谢......
  • 我正在尝试将 ArrayList 添加到 mdata 中。自动完成功能停止工作,它显示了对任何字符输入的所有预测搜索。怎么办?
  • 检查您是否正在过滤结果。不要将所有可过滤数据添加到 mData,遍历它并找到与用户查询匹配的数据,然后仅将这些字符串添加到 mData。
  • if (constraint != null) { try { for(int i=0;i
【解决方案2】:
if (constraint != null) {

    try {
        for(int i=0;i<temp.size();i++)
        {
        if(temp.get(i).toString().startsWith(constraint.toString().toUpperCase()))
        {

        mData.add(temp.get(i).toString());  

        }
        }


        mData.add("SEARCH NOT THERE");

    } catch (Exception e) {

    }


         filterResults.values = mData;
         filterResults.count = mData.size();




}
return filterResults;

我已经完成了过滤...仍然显示所有结果而不是我在其中输入的任何内容...:(

【讨论】:

  • 您应该编辑您的问题,而不是在答案部分发布另一个问题。并且不要忘记在编辑问题时包含编辑摘要
猜你喜欢
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多