アクティビティのナビゲーションに問題があります。検索はうまくいきます。
アクティビティ階層は次のようになります。
/ MyListActivityA -- ItemActivityA
MainActivity -- MyTabActivity -- MyListActivityB -- ItemActivityB
\ MyListActivityB -- ItemActivityC
TabActivityのタブは、MyListActivityでインテントを使用して作成されます。
MyListActivitiesは、以下のようにマニフェストで宣言されています。
<activity
android:name=".views.OrderListView">
<intent-filter>
<action
android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable_orders" />
</activity>
すべてのMyListActivityには、独自の SearchRecentSuggestionsProvider があります。
最初に解決した問題
MyListActivityのいずれかで検索を呼び出すと、MyTabActivityの外でアクティビティを取得しました。したがって、MyTabActivityへのリダイレクトを実装しました。MyListActivityインテント アクション
の onCreate() でチェックされます。もし
Intent.ACTION_SEARCH
次に、TabActivity を開始し、以下のように現在を終了します。
if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
intent.setClass(context, MyTabActivity.class);
intent.setAction(MyTabActivity.ACTION_SEARCH_PROXY);
Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
if(appData != null) {
intent.putExtras(appData);
}
intent.putExtra(Constants.ACTIVITY_TYPE, activityType);
intent.putExtra(ActivityTabView.EXTRA_SEARCH_QUERY, query);
context.startActivity(intent);
context.finish();
}
MyListActivityが見つかったとき
ActivityTabView.EXTRA_SEARCH_QUERY
リストに検索クエリを作成します。そして問題は解決しました。
2番目に解決された問題
[戻る] ボタンをクリックすると、検索クエリがクリアされます。問題ありません。しかし、もう一度「戻る」をクリックすると、過去の検索が表示されます。
そのため、 noHistory をMyTabActivityに追加しました:
<activity
android:name=".views.MyTabActivity"
android:noHistory="true">
</activity>
3 つ目の未解決の問題
たとえば、MyListActivityAからItemActivityAに移動して [戻る] をクリックすると、 MainActivity にリダイレクトされます。noHistory パラメータのため、 MyTabActivityに戻ることができません。
タブ内の各アクティビティに対してそれぞれ TabActivity で Android 検索を使用するための良い解決策はありますか?