Android搜索意图没有解雇我做错了什么?

时间:2014-10-01 19:32:31

标签: android android-actionbar searchview

好的,我非常沮丧,我一直试图让SearchView工作几个小时,现在没有运气。我检查了如何处理这个,我找到了一个示例项目,示例项目运行良好。然后我在我的项目中实现了同样的事情,我搞砸了。意图不会激发。我不明白为什么。我跟着 this

我将所有活动都放在一个活动文件夹中,但删除了搜索和主要活动以查看是否属于这种情况......事实并非如此。在我的搜索结果活动中,我正在处理意图。它现在看起来像这样。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_result);

        // get the action bar
        ActionBar actionBar = getActionBar();

        // Enabling Back navigation on Action Bar icon
        actionBar.setDisplayHomeAsUpEnabled(true);

        txtQuery = (TextView) findViewById(R.id.txtQuery);

        handleIntent(getIntent());
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.search_result, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent(intent);
    }

    /**
     * Handling intent data
     */
    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

            String query = intent.getStringExtra(SearchManager.QUERY);

            txtQuery.setText("Search Query: " + query);

        }

    }    

My Searchable XML看起来像这样。

<?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" />

由于某种原因,搜索提示没有出现,但字符串资源显示并且已声明。

我的选项菜单如下所示

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/search"
        android:title="Search"
        android:icon="@android:drawable/ic_search_category_default"
        android:showAsAction="collapseActionView|ifRoom"
        android:actionViewClass="android.widget.SearchView" />
    <item android:id="@+id/Menu"
        android:title="MENU"
        android:showAsAction="collapseActionView|ifRoom"
        />

我的Manifest看起来像这样。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
             >
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.MenuActivity"
            android:label="@string/title_activity_menu"
            android:theme="@style/IDME.Theme.Transparent" >

        </activity>
        <activity
            android:name=".activities.CategoriesActivity"
            android:label="@string/title_activity_categories" >
        </activity>

        <activity
            android:name=".SearchResultActivity"
            android:label="@string/title_activity_search_result"
           >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

        </activity>
    </application>
    </menu>

我的搜索视图充气机看起来像这样。

 @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.options_menu, menu);
            SearchManager searchManager =
                    (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            SearchView searchView =
                    (SearchView) menu.findItem(R.id.search).getActionView();
            searchView.setSearchableInfo(
                    searchManager.getSearchableInfo(getComponentName()));

            return  true;
        }

我不能为我的生活弄清楚发生了什么,我跟着两个向导走了一个发球台,我看不出有什么不对。我已经搞乱了元数据,我真的不能再看到问题了。我被困了

2 个答案:

答案 0 :(得分:0)

您的元数据不正确必须使用:

<meta-data
  android:name="android.app.searchable"
  android:resource="@xml/searchable"
  android:value="your package name of searchable activity.SearchResultActivity" />

答案 1 :(得分:0)

我也遵循完全相同的(官方Android)指南Setting Up the Search Interface,与OP @rubsnick在同一条船上。

事实证明,所有需要调整的是 -

更改

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
         >
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchResultActivity" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

注意<meta-data代码! (具体来说, android:name

此外,无需在此处指定可搜索的 xml资源...而是在SearchResultActivity活动中执行此操作,如下所示...

最后,为<activity修改SearchResultActivity,如下所示:

    <activity
        android:name=".SearchResultActivity"
        android:label="@string/title_activity_search_result" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
    </activity>

以下SO主题完全公正地说明为什么 default_searchable 而不是可搜索

What's the difference between android.app.default_searchable and android.app.searchable meta-data?