如何使用搜索查看在工具栏的Andr​​oid看在、如何使用、工具栏、oid

2023-09-12 02:24:42 作者:愈久愈旧

在code上我的工作,是使用工具栏和充气一个菜单

下面是code

 专用工具栏mToolbar;
mToolbar.inflateMenu(R.menu.chat_screen_menu);
setupMenu();
私人无效setupMenu()
   {
   mMenu = mToolbar.getMenu();
   如果(mMenu!= NULL)
      {
       如果(mChatPager =空&安培;!&安培; mChatPager.getCurrentItem()大于0)
          {
          mMenu.setGroupVisible(R.id.menu_group_chats,真正的);
          mMenu.setGroupVisible(R.id.menu_group_contacts,假);
          }
       其他
          {
           mMenu.setGroupVisible(R.id.menu_group_chats,假);
           mMenu.setGroupVisible(R.id.menu_group_contacts,真正的);
           mMenu.setGroupVisible(R.id.menu_group_otr_verified,假);
           mMenu.setGroupVisible(R.id.menu_group_otr_unverified,假);
           mMenu.setGroupVisible(R.id.menu_group_otr_off,假);
          }
    }
    mToolbar.setOnMenuItemClickListener(新OnMenuItemClickListener()
    {
    ..........
    }
}
 

但现在,他们需要一个搜索在 tool_bar 按钮。 我设法把它,我也跟着导游这里 当我尝试写一些东西来搜索,面包我已经把测试监听器永远不会显示。 这表明监听器不能正常工作

  @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){

    MenuInflater充气= getMenuInflater();
    inflater.inflate(R.menu.chat_screen_menu,菜单);

    SearchManager searchManager =(SearchManager)getSystemService(Context.SEARCH_SERVICE);
    mSearchView =(搜索查看)MenuItemCompat.getActionView(menu​​.findItem(R.id.action_menu_search));
    最后的土司面包=新吐司(MAPP);

    如果(mSearchView!= NULL)
    {
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        mSearchView.setIconifiedByDefault(假);

        SearchView.OnQueryTextListener queryTextListener =新SearchView.OnQueryTextListener()
        {
            公共布尔onQueryTextChange(字符串newText)
            {
                mSearchString = newText;
                // doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(),测试1,Toast.LENGTH_LONG).show();
                返回true;
            }

            公共布尔onQueryTextSubmit(查询字符串)
            {
                mSearchString =查询;
                // doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(),Test2的,Toast.LENGTH_LONG).show();

                返回true;
            }
        };

        mSearchView.setOnQueryTextListener(queryTextListener);
    }

    返回true;

}
 

解决方案

您必须使用Appcompat库的。它的使用方式如下:

dashboard.xml

 <项目
    机器人:ID =@ + ID / ACTION_SEARCH
    机器人:图标=@机器人:可绘制/ ic_menu_search
    应用程序:showAsAction =总是
    应用程序:actionViewClass =android.support.v7.widget.SearchView
    机器人:标题=搜索/>
 

活动文件:

 公共布尔onCreateOptionsMenu(功能菜单){
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.dashboard,菜单);

     菜单项searchItem = menu.findItem(R.id.action_search);

    SearchManager searchManager =(SearchManager)MainActivity.this.getSystemService(Context.SEARCH_SERVICE);

    搜索查看搜索查看= NULL;
    如果(searchItem!= NULL){
        搜索查看=(搜索查看)searchItem.getActionView();
    }
    如果(搜索查看!= NULL){
        sea​​rchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
    }
        返回super.onCreateOptionsMenu(菜单);
}
 

清单文件:

 <元数据
      机器人:名称=android.app.default_searchable
      机器人:值=com.apkgetter.SearchResultsActivity/>

        <活动
            机器人:名称=com.apkgetter.SearchResultsActivity
            机器人:标签=@字符串/ APP_NAME
            机器人:launchMode =singleTop>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.SEARCH/>
            &所述; /意图滤光器>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.VIEW/>
            &所述; /意图滤光器>

            &所述;元数据
                机器人:名称=android.app.searchable
                机器人:资源=@ XML /搜索/>
        < /活性GT;
 

搜索XML文件:

 < XML版本=1.0编码=UTF-8&GT?;
<可搜索的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:提示=@字符串/ search_hint
    机器人:标签=@字符串/ APP_NAME/>
 

而在最后,你SearchResultsActivity类code。表示了你的搜索结果。

The code on which I am working, is using a Toolbar and inflating a menu.

Here is the code

private Toolbar mToolbar;
mToolbar.inflateMenu(R.menu.chat_screen_menu);
setupMenu ();
private void setupMenu ()
   {
   mMenu = mToolbar.getMenu();
   if (mMenu != null)
      {
       if (mChatPager != null && mChatPager.getCurrentItem() > 0)
          {
          mMenu.setGroupVisible(R.id.menu_group_chats, true);
          mMenu.setGroupVisible(R.id.menu_group_contacts, false);
          }
       else
          {
           mMenu.setGroupVisible(R.id.menu_group_chats, false);
           mMenu.setGroupVisible(R.id.menu_group_contacts, true);
           mMenu.setGroupVisible(R.id.menu_group_otr_verified,false);
           mMenu.setGroupVisible(R.id.menu_group_otr_unverified,false);
           mMenu.setGroupVisible(R.id.menu_group_otr_off,false);
          }
    }
    mToolbar.setOnMenuItemClickListener(new OnMenuItemClickListener ()
    {
    ..........
    }
}

But now, they require a Search button in the tool_bar. I managed to put it, I followed a guide here When I try to write something to search, the toast I had put to test the listener never shown. which indicates listener is not working

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.chat_screen_menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_menu_search));
    final Toast toast = new Toast(mApp);

    if (mSearchView != null )
    {
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        mSearchView.setIconifiedByDefault(false);

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener()
        {
            public boolean onQueryTextChange(String newText)
            {
                mSearchString = newText;
                //doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(), "Test1", Toast.LENGTH_LONG).show();
                return true;
            }

            public boolean onQueryTextSubmit(String query)
            {
                mSearchString = query;
                //doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(), "Test2", Toast.LENGTH_LONG).show();

                return true;
            }
        };

        mSearchView.setOnQueryTextListener(queryTextListener);
    }

    return true;

}

解决方案

you have to use Appcompat library for that. which is used like below:

dashboard.xml

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search"/>

Activity file:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.dashboard, menu);

     MenuItem searchItem = menu.findItem(R.id.action_search);

    SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);

    SearchView searchView = null;
    if (searchItem != null) {
        searchView = (SearchView) searchItem.getActionView();
    }
    if (searchView != null) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
    }
        return super.onCreateOptionsMenu(menu);
}

manifest file:

<meta-data 
      android:name="android.app.default_searchable" 
      android:value="com.apkgetter.SearchResultsActivity" /> 

        <activity
            android:name="com.apkgetter.SearchResultsActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

searchable xml file:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name" />

And at last, your SearchResultsActivity class code. for showing result of your search.