【问题标题】:Auto Complete text view does not show suggestions自动完成文本视图不显示建议
【发布时间】:2014-02-25 12:09:24
【问题描述】:

我已经实现了一个自动完成编辑文本,它确实显示了建议,但我也想实现不同的功能。

现在,我有一串国家/地区

private static final String[] COUNTRIES = new String[] {
    "Belgium", "France", "Italy", "Germany", "Spain"
};

我在我的适配器中调用它。现在,当我开始输入任何国家/地区名称时,我的编辑文本开始向我显示建议,但是

我想要的是:

假设我想在编辑文本中写 France 10 次,所以我希望我的自动完成编辑文本在我开始输入 France 时给我建议等等,

但我的编辑文本只给了我输入的第一个单词的建议。我怎样才能做到这一点,比如我的编辑文本如何为我输入的每个文本提供建议?

【问题讨论】:

    标签: android autocomplete android-edittext


    【解决方案1】:

    检查下面的代码,它会像你按下一个空格并输入一些东西一样,你会得到建议列表:

    Xml 布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <MultiAutoCompleteTextView
        android:id="@+id/macTvInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    
    
    </RelativeLayout>
    

    代码:

    public class MainActivity extends Activity {
    
    private static final String[] COUNTRIES = new String[] { "Belgium",
            "France", "Italy", "Germany", "Spain" };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, COUNTRIES);
        MultiAutoCompleteTextView macTvInput = (MultiAutoCompleteTextView) findViewById(R.id.macTvInput);
        macTvInput.setAdapter(adapter);
        macTvInput.setTokenizer(new SpaceTokenizer());
    }
    
    private class SpaceTokenizer implements Tokenizer {
    
                private final char delimiter = ' ';
    
        public int findTokenStart(CharSequence text, int cursor) {
            int i = cursor;
    
            while (i > 0 && text.charAt(i - 1) != delimiter) {
                i--;
            }
            while (i < cursor && text.charAt(i) == delimiter) {
                i++;
            }
    
            return i;
        }
    
        public int findTokenEnd(CharSequence text, int cursor) {
            int i = cursor;
            int len = text.length();
    
            while (i < len) {
                if (text.charAt(i) == delimiter) {
                    return i;
                } else {
                    i++;
                }
            }
    
            return len;
        }
    
        public CharSequence terminateToken(CharSequence text) {
            int i = text.length();
            while (i > 0 && text.charAt(i - 1) == delimiter) {
                i--;
            }
    
            return text;
    
        }
    
    }
    }
    

    【讨论】:

    • 我实际上已经使用 spcaeTokenizer 实现了,但非常感谢您提供的代码。 1+ 给你
    【解决方案2】:

    在你的布局中使用MultiAutoCompleteTextView,并实现这样的代码,这里我用commas分割

        String[] colors = getResources().getStringArray(R.array.AndroidDesk);
    
        adapter1 = new ArrayAdapter<String>(this,R.layout.suggestion_textview,colors);
    
        //autoComplete = (AutoCompleteTextView) findViewById(R.id.autoComplete);
        multiAutoComplete = (MultiAutoCompleteTextView) findViewById(R.id.editText1);
    
        // set adapter for the auto complete fields
    //  autoComplete.setAdapter(adapter);
        multiAutoComplete.setAdapter(adapter1);
    
        // specify the minimum type of characters before drop-down list is shown
        //autoComplete.setThreshold(1);
        multiAutoComplete.setThreshold(2);
        // comma to separate the different colors
        multiAutoComplete.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    

    【讨论】:

    • 50% 已解决。现在剩下的唯一问题是我想要像 EnterTokenizer() 这样的东西,是否存在类似的东西?
    【解决方案3】:

    使用 MultiAutoCompleteTextView 代替 AutoCompleteTextView

    public class CountriesActivity extends Activity {
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.autocomplete_7);
    
             ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                     android.R.layout.simple_dropdown_item_1line, COUNTRIES);
             MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.edit);
             textView.setAdapter(adapter);
             textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
         }
    
         private static final String[] COUNTRIES = new String[] {
             "Belgium", "France", "Italy", "Germany", "Spain"
         };
     }
    

    来源:http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html

    【讨论】:

    • 50% 已解决。现在剩下的唯一问题是我想要类似 EnterTokenizer() 的东西,是否存在类似的东西?
    • 您可能需要实现自定义字符串标记器。供参考stackoverflow.com/questions/18120522/…
    猜你喜欢
    • 2011-10-03
    • 2018-04-27
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2020-05-17
    相关资源
    最近更新 更多