在appbar上添加搜索小部件后应用程序崩溃

时间:2016-10-29 09:21:07

标签: java android

我一直在寻找一种方法来为我的应用添加搜索功能(特别是在应用栏上)。

我在Andoid devoloper guide

上找到了一份文档

我仔细按照每一步,但应用程序崩溃。

  1. 我创建了一个可搜索的配置
  2. RES / XML / searchable.xml

    public static DataTable CreateDataTable(this IEnumerable<int> items, string colName)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(colName, typeof(int));
        foreach (int item in items)
        {
            dt.Rows.Add(item);
        }
        return dt;
    }
    
    1. 我创建了一个名为 SearchActivity

    2. 的新搜索活动
    3. 我在清单

    4. 中将SearchActivity声明为Searchable Activty

      的Manifest.xml

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

        中的OncreateOptionsMenu中添加了这些内容
        <application ... >
            <activity android:name=".SearchActivity" >
                <intent-filter>
                    <action android:name="android.intent.action.SEARCH" />
                </intent-filter>
                <meta-data android:name="android.app.searchable"
                           android:resource="@xml/searchable"/>
            </activity>
            ...
        </application>
        
      2. 这是 menu / menu_main.xml

        public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        
        // Get the searchview and set the searchable configuration
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        
        // Assumes current activity is the searchable activity
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
        
        return true; }
        

      3. 有2个Activitues。

        • MainActivty(其中包含带有搜索图标的Appbar,如 menu_main.xml 文件中所示)
        • SearchActivity

        当用户点击MainActivity中的搜索图标时,我希望它转到SearchActivity并在那里显示搜索小部件。我该怎么做。

        我应该将哪些内容添加到 SearchActivity.java ??

        以下是应用程序崩溃时收到的日志消息 -

        <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context=".MainActivity">
        
        <item
            android:id="@+id/action_search"
            android:title="@string/action_search"
            android:orderInCategory="100"
            android:icon="@drawable/ic_search_white"
            app:showAsAction="ifRoom" />
        

1 个答案:

答案 0 :(得分:0)

尝试添加

<meta-data
     android:name="android.app.searchable"
     android:value=".SearchActivity" />

application部分的您的Manifest.xml中

<application ... >
....
<meta-data
     android:name="android.app.searchable"
     android:value=".SearchActivity" />
....
<activity android:name=".SearchActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>
</activity>
...

这告诉您的应用如何解决"android.app.searchable"

查看this,您会发现:

  

如果您希望应用程序中的每个活动都提供搜索对话框,请将上述元素作为元素的子元素插入,而不是每个元素。这样,每个活动都会继承该值,提供搜索对话框,并将搜索提供给相同的可搜索活动。 (如果您有多个可搜索的活动,则可以通过在单个活动中放置不同的声明来覆盖默认的可搜索活动。)   现在,您的活动已启用搜索对话框,您的应用程序已准备好执行搜索。