9

私はこれでしばらく立ち往生しています。私は他の回答を見てきましたSOが、私の問題を解決するのに役立ちませんでした。

私の問題は、検索ダイアログが によって呼び出されないことonSearchRequested()です。検索で何が起こっているのかわかりません...

関連するコードは次のとおりです...

マニフェスト

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

/res/xml/searchable.xml

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

</searchable>

で定義された文字列リソースがありますstrings.xml

SearchableActivity クラス

public class SearchableActivity extends ListActivity {

    public void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          Log.d("SEARCH", "HERE");
          handleIntent(getIntent()); 
       } 

       public void onNewIntent(Intent intent) { 
          setIntent(intent); 
          handleIntent(intent); 
       } 

       public void onListItemClick(ListView l, View v, int position, long id) { 
          // call the appropriate detail activity
       } 

       private void handleIntent(Intent intent) { 
          if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
             String query = intent.getStringExtra(SearchManager.QUERY); 
             doSearch(query); 
          } 
       }    

       private void doSearch(String queryStr) { 
           Toast.makeText(getApplicationContext(), queryStr, Toast.LENGTH_LONG).show();
       } 

}

検索を呼び出しているアクティビティ内のコード...

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getTitle().equals("Search")) {
        Toast.makeText(getApplicationContext(), "Search = "+onSearchRequested(), Toast.LENGTH_LONG).show();
        return onSearchRequested();
    } else {
        return false;
    }
}

onSearchRequested()返品中trueです。しかし、SearchableActivityは呼び出されません。どんな助けでも大歓迎です。

どうもありがとうございました。


更新しました

どうでも!私はそれを考え出した!

meta-data解決策は、タグの外側とactivityタグの内側に移動することでしたapplication。この問題に遭遇した人への回答として以下を追加しました。

ありがとう。

4

4 に答える 4

13

検索アクティビティへのフルパスを宣言する必要があります

<meta-data
          android:name="android.app.default_searchable"
          android:value="com.example.search.SearchableActivity" />
于 2016-10-01T15:52:39.247 に答える
4

アプリケーション内のすべてのアクティビティで検索ダイアログを提供する必要がない限り、メタデータをアクティビティ タグの外に移動する必要はありません。おそらくうまくいかなかった理由は、メタデータを間違ったアクティビティに配置し、それを外部に移動して問題を解決したためです。

ResearchActivity次のように呼び出す Activity と混同しないでください。

    <activity
        android:name=".SearchableActivity"
        android:label="@string/title_activity_searchable"
        android:launchMode="singleTop">
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchableActivity" />
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

エラーは発生しませんが、機能しません。作業例:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchableActivity" />
    </activity>
    <activity
        android:name=".SearchableActivity"
        android:label="@string/title_activity_searchable"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
</application>

MainActivityは、検索ダイアログ (検索ウィジェットの場合もあります)を提供するアクティビティでありSearchableActivity、ユーザーが検索を要求しonSearchRequested()て呼び出された後に開始されるアクティビティです。

于 2015-06-11T15:43:20.407 に答える
3

動作しました。

meta-data解決策は、以下のように、タグの外側とactivityタグの内側に移動することでしたapplication...

<meta-data
    android:name="android.app.default_searchable"
    android:value=".SearchableActivity" />

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

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

ありがとう!

于 2013-06-26T04:54:48.873 に答える
1

アップデート

絶対ですoverride onNewIntent()

マニフェストをに変更

<activity
    android:name=".SearchableActivity"
    android:label="@string/app_name"
    android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data
        android:name="android.app.default_searchable"
        android:resource="@xml/searchable"
        android:value=".SearchableActivity" />
</activity>
于 2013-06-26T04:23:16.973 に答える