搜索查看建议不与一个字符工作 [英] SearchView Suggestion doesn't work with one character

查看:91
本文介绍了搜索查看建议不与一个字符工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和我的搜索查看建议,一个问题,当我写一个字的搜索查看的建议没有按'我们走来。
但是,当我在写两个字符的的EditText 我的搜索查看的建议会来的。

所以,我想,我的建议已经来当我写一个字的的EditText 我的搜索查看,是什么我能做什么?

从MainActivity我的code:

 私人搜索查看mSearchView;
私人SimpleCursorAdapter mAdapter;
私人的ArrayList<串GT; mList;@覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    mList =新的ArrayList<串GT;();
    mList.add(测试1);
    mList.add(试验2);
    mList.add(测试3);
    mList.add(测试4);
    mList.add(试验5);
    mList.add(试验6);
    mList.add(测试7);
    mList.add(测试8);
    mList.add(测试9);
    mList.add(测试10);    ListView控件的ListView =(ListView控件)findViewById(android.R.id.list);
    ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,mList);
    listView.setAdapter(适配器);    mAdapter =新SimpleCursorAdapter(getBaseContext(),R.layout.suggestion,空,新的String [] {},新的INT [] {} R.id.suggestion_textView,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单)
{
    super.onCreateOptionsMenu(菜单);    MenuInflater吹气= getMenuInflater();
    inflater.inflate(R.menu.main,菜单);
    菜单项searchItem = menu.findItem(R.id.menu_search);
    mSearchView =(搜索查看)searchItem.getActionView();    mSearchView.setSuggestionsAdapter(mAdapter);    // onItemClick
    mSearchView.setOnSuggestionListener(新SearchView.OnSuggestionListener()
    {
        @覆盖
        公共布尔onSuggestionSelect(INT位置)
        {
            返回false;
        }        @覆盖
        公共布尔onSuggestionClick(INT位置)
        {
            //仅用于测试
            完();
            返回false;
        }
    });    mSearchView.setOnQueryTextListener(新SearchView.OnQueryTextListener()
    {
        @覆盖
        公共布尔onQueryTextSubmit(String s)将
        {
            返回false;
        }        @覆盖
        公共布尔onQueryTextChange(String s)将
        {
            最后MatrixCursor C =新MatrixCursor(新的String [] {BaseColumns._ID,});            的for(int i = 0; I< mList.size();我++)
            {
                    c.addRow(新的对象[] {我,mList.get(I)});            }
            mAdapter.changeCursor(C);
            返回false;
        }
    });    返回true;
}


解决方案

好吧,我找到了解决办法我自己。这不是干净的,但它会奏效。
我已经调试到搜索查看然后我发现的ID AutoCompleteTextView 搜索查看。比我设定的门槛 AutoCompleteTextView 2〜1。现在它的工作原理。


  @覆盖
公共布尔onCreateOptionsMenu(菜单菜单)
{
    super.onCreateOptionsMenu(菜单);
    MenuInflater吹气= getMenuInflater();
    inflater.inflate(R.menu.main,菜单);
    菜单项searchItem = menu.findItem(R.id.menu_search);
    mSearchView =(搜索查看)searchItem.getActionView();    //解决方案
    INT autoCompleteTextViewID = getResources()则getIdentifier(机器人:ID / search_src_text,NULL,NULL);
    AutoCompleteTextView searchAutoCompleteTextView =(AutoCompleteTextView)mSearchView.findViewById(autoCompleteTextViewID);
    sea​​rchAutoCompleteTextView.setThreshold(1);
    ///////////    mSearchView.setSuggestionsAdapter(mAdapter);    // onItemClick
    mSearchView.setOnSuggestionListener(新SearchView.OnSuggestionListener()
    {
        @覆盖
        公共布尔onSuggestionSelect(INT位置)
        {
            返回false;
        }        @覆盖
        公共布尔onSuggestionClick(INT位置)
        {
            //仅用于测试
            完();
            返回false;
        }
    });    mSearchView.setOnQueryTextListener(新SearchView.OnQueryTextListener()
    {
        @覆盖
        公共布尔onQueryTextSubmit(String s)将
        {
            返回false;
        }        @覆盖
        公共布尔onQueryTextChange(String s)将
        {
            最后MatrixCursor C =新MatrixCursor(新的String [] {BaseColumns._ID,});
            的for(int i = 0; I< mList.size();我++)
            {
                如果(mList.get(ⅰ).toLowerCase()。startsWith(s.toLowerCase()))
                {
                    c.addRow(新的对象[] {我,mList.get(I)});
                }
            }
            mAdapter.changeCursor(C);            返回false;
        }
    });
返回true;
}


问候

最大

I have a problem with my SearchView Suggestion, when I write one character in the SearchView the Suggestion doesn't come. But when I write two characters in the EditText of my SearchView the Suggestion will come.

So I want that my Suggestion already come when I write one character in the EditText of my SearchView, what can I do?

My Code from MainActivity:

private SearchView mSearchView;
private SimpleCursorAdapter mAdapter;
private ArrayList<String> mList;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mList = new ArrayList<String>();
    mList.add("Test 1");
    mList.add("Test 2");
    mList.add("Test 3");
    mList.add("Test 4");
    mList.add("Test 5");
    mList.add("Test 6");
    mList.add("Test 7");
    mList.add("Test 8");
    mList.add("Test 9");
    mList.add("Test 10");

    ListView listView = (ListView) findViewById(android.R.id.list);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mList);
    listView.setAdapter(adapter);

    mAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.suggestion, null, new String[] {""}, new int[] {R.id.suggestion_textView}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    mSearchView = (SearchView) searchItem.getActionView();

    mSearchView.setSuggestionsAdapter(mAdapter);

    // onItemClick
    mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener()
    {
        @Override
        public boolean onSuggestionSelect(int position)
        {
            return false;
        }

        @Override
        public boolean onSuggestionClick(int position)
        {
            // Only for Test
            finish();
            return false;
        }
    });

    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextSubmit(String s)
        {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s)
        {
            final MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID, "" });

            for (int i=0; i < mList.size(); i++)
            {
                    c.addRow(new Object[] {i, mList.get(i)});

            }
            mAdapter.changeCursor(c);
            return false;
        }
    });

    return true;
}

解决方案

Ok, I found a solution myself. It's not clean but it will work. I have debug into SearchView and then I found the ID of the AutoCompleteTextView from SearchView. Than I set the Threshold for the AutoCompleteTextView from 2 to 1. Now it works.


@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    mSearchView = (SearchView) searchItem.getActionView();

    // Solution
    int autoCompleteTextViewID = getResources().getIdentifier("android:id/search_src_text", null, null);
    AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) mSearchView.findViewById(autoCompleteTextViewID);
    searchAutoCompleteTextView.setThreshold(1);
    ///////////

    mSearchView.setSuggestionsAdapter(mAdapter);

    // onItemClick
    mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener()
    {
        @Override
        public boolean onSuggestionSelect(int position)
        {
            return false;
        }

        @Override
        public boolean onSuggestionClick(int position)
        {
            // Only for Test
            finish();
            return false;
        }
    });

    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextSubmit(String s)
        {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String s)
        {
            final MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID, ""     });
            for (int i=0; i < mList.size(); i++)
            {
                if (mList.get(i).toLowerCase().startsWith(s.toLowerCase()))
                {
                    c.addRow(new Object[]{i, mList.get(i)});
                }
            }
            mAdapter.changeCursor(c);

            return false;
        }
    });
return true;
}


Greetings

Max

这篇关于搜索查看建议不与一个字符工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆