18

RSS からダウンロードした記事や画像を閲覧するためのいくつかの異なるアクティビティを持つ Android アプリがあります。

ファイルを使用して、検索ボタンを検索ダイアログに接続できるようにしたいと考えていsearchable.xmlます。以下を使用して、1回の検索でこれを行うことができました。

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

そして<application />

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

これで、任意のアクティビティから [検索] ダイアログを起動できるようになり、SearchResultsActivity.

ImageListActivityユーザーがを使用しているときに画像を検索しsearchable_images.xml、それ以外の場所ではデフォルトを使用できるようにしたいと考えています。

次のメタデータ要素を含むがありSearchResultsImageActivity、 で同じ要素を使用しましたImageListActivity

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

で検索ボタンを押すと、ImageListActivityからデフォルトの検索が取得されますsearchable_articles.xml

を に変更するdefault_searchableSearchResultsImageActivity、画像検索は常に起動され、記事検索は起動されません。

default_searchableメタデータ要素を完全に削除し、searchable選択したアクティビティのみのメタデータを追加すると、検索が開始されません。

これは可能だと確信していますが、何が間違っているのかわかりません。

4

3 に答える 3

5

ファイルでアクティビティタグをManifest更新しますImageListActivity

<activity
    android:name=".ImageListActivity"
    ...

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

したがって、ネイティブ検索をトリガーすると、他の検索のデフォルトが呼び出されますImageListActivitySearchResultsImageActivity

であると仮定しSearchResultsImageActivityますsearchable

于 2012-07-26T00:02:23.617 に答える
1

私がこれを行った 1 つの方法は、偽のアクティビティを作成し、必要なときにアクティビティを切り替えることでした。

<activity android:name="activitySearchMain" />
  <activity android:name="activitySearchSub1">
    <intent-filter>
      <action android:name="android.intent.action.SEARCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.ALTERNATIVE" />
      <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
      <data android:scheme="user" />
    </intent-filter>
  </activity>
  <activity android:name="activitySearchSub2">
    <intent-filter>
      <action android:name="com.sample.twitter.action.SEARCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.ALTERNATIVE" />
      <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
      <data android:scheme="user" />
    </intent-filter>
</activity>

サブ アクティビティの名前が付けられた 2 つのクラスを作成します。

コンポーネントがクリックされたときに、このようなインテントを作成します...

Intent sourceIntent = getIntent();
Intent newIntent = new Intent(this, activitySearchSub2.class);
newIntent.setAction(activitySearchSub2.ACTION2);
newIntent.setData(sourceIntent.getData());
startActivity(newIntent);
finish();

ボタンがクリックされたとき、または他のコンポーネントがクリックされたときに、onClick からインテントを呼び出します。

于 2011-06-06T20:06:44.190 に答える
0

そのアクティビティだけで検索機能をオーバーライドすると、検索呼び出しがアプリケーション レベルまで上がるのを防ぐ必要があります。戻り値は、呼び出しが伝搬されるかどうかを制御します。

@Override
public boolean onSearchRequested() {
    onPromptSearch();
    return false;  // don't go ahead and show the search box
}
于 2011-09-28T18:26:09.250 に答える