5

[戻る] ボタンで以前の状態に戻せるように、通常は複数のタスクに存在させたいアクティビティがあります。ただし、新しいアクティビティをタスクスタックにプッシュせずに、既存のアクティビティでSearchViewを使用したいとも考えています (現在表示されているものを検索したいため)。これが私の問題です:

  • アクティビティの起動モードを「singleTop」に設定すると、SearchView は現在のアクティビティで動作しますが、Context.startActivityは新しいアクティビティをスタックに追加しません。
  • アクティビティの起動モードを「標準」に設定すると、startActivityは新しいアクティビティをスタックに追加しますが、SearchView は既存のアクティビティを検索する代わりに、新しい (空の) アクティビティも作成します。

SearchView にインテント フラグを使用させる方法が見つかりません (例: FLAG_ACTIVITY_SINGLE_TOP。逆に、起動モードを「singleTop」に設定してからFLAG_ACTIVITY_NEW_TASKをすべてのインテントに追加してみましたが、それは別のアクティビティ クラスから起動した場合にのみ機能しました。独自のクラスからアクティビティの新しいインスタンスを起動しようとすると、Android は FLAG_ACTIVITY_NEW_TASK を尊重せず、新しいタスクをスタックにプッシュしませんでした。

おそらく、Activity.onNewIntent でアクティビティを強制的に複製するためにできることがあります。

「Android 3.0 以降、SearchView ウィジェットをアクション バーのアイテムとして使用することが、アプリで検索を提供するための推奨される方法であるにもかかわらず、SearchView をあきらめて独自のカスタム ウィジェットを作成する寸前です。 (ソース) — これまでのところ、自明ではない場合に役立つには、あまりにも柔軟性がなく、構成もできないようです。

誰かがこの問題の解決策を見つけましたか?

4

2 に答える 2

4

多くの反省と誤ったスタートを切った後、SearchView はこのタスクにとって単に間違っていることに気付きました。Google は、特定の種類の検索アクティビティを念頭に置いて SearchView を設計しました。

  • ユーザーが検索クエリを入力します。
  • アプリは、結果のリストを表示する新しいアクティビティをプッシュします。

これは私が使用していた検索モデルではありません。代わりに、クエリを使用して、現在画面に表示されているリストを絞り込みたいと思いました。これは、クエリと応答の同期モデルというよりも、フィルタリング検索に近いものでした。SearchView はそのように設計されていないので、先に進んで独自のウィジェットを作成しました (そしてそれを検索メニュー項目と検索ボタンにバインドしました)。

この質問について誰もコメントしていないことに驚いています — 通常、Android に関する質問は多くの議論を引き起こします。これはあまりにも遠すぎたと思います。

于 2013-02-23T23:09:11.057 に答える