【问题标题】:Android AutoCompleteTextView For Mentioning PeopleAndroid AutoCompleteTextView 用于提及人
【发布时间】:2014-11-09 15:11:36
【问题描述】:

目前我正在使用 android 开发社交媒体应用程序。在这个应用程序中,我希望允许用户互相提及(比如在 twitter、fb、instagram 等中)。我曾尝试使用 AutoCompleteTextView。但是,它只显示对第一个单词的建议,而不是对下一个单词的建议。

例如,在当前系统中: 如果我在第一个单词中输入:“@ab”,那么它将显示建议列表。但是,当我输入:“hi,@ab”时,它不会显示任何建议。

有人知道如何解决这个问题并提供一些例子吗?以下是我在我的应用程序中创建 AutoCompleteTextVIew 的方法:

AutoCompleteTextView et_comment = new AutoCompleteTextView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
                    android.R.layout.simple_dropdown_item_1line, user_follow);
et_comment.setAdapter(adapter);

非常感谢。

【问题讨论】:

  • 使用 MultiAutoCompleteTextView 代替 AutoCompleteTextView 并设置 setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

标签: java android autocomplete


【解决方案1】:

你需要重写 getFilter() 方法。

    adapterSearchProducts = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, listProductName) {
        @Override
        public Filter getFilter() {
            // TODO Auto-generated method stub
            Log.i(TAG, "getFilter()");
            return myFilter;
        }
    };

给你概念过滤器类,用字符串做一些魔术。

    /*
     * Custom filter
     */
    Filter myFilter = new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            Log.i(TAG, "constraint = " + constraint);

            FilterResults filterResults = new FilterResults();


            /**
            * Do your work here. Play with constraint.
            * Make tmp array list and work with it
            */

            // following two lines is very important
            // as publish result can only take FilterResults objects
            synchronized (this) {
            filterResults.values = "array-list";
            filterResults.count = "array-list-size";
            Log.i(TAG, "filterResults.count ==  " + filterResults.count);
            }

            return filterResults;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence contraint,
                FilterResults results) {

            if (results != null && results.count > 0) {
                Log.i(TAG, "results.count > 0 :: " + results.count);

                listProductName.clear(); // clear your original array list

                listProductName.addAll((List<String>) results.values);
                // add all tmp result to original result

                adapterSearchProducts.notifyDataSetChanged();
                // notify your data set change
            } else {
                Log.i(TAG, "results.count <= 0  :: " + results.count);
                adapterSearchProducts.notifyDataSetInvalidated();
            }
        }
    };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2014-03-13
    • 2017-07-22
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多