0

ユーザーが値を入力し、インターネット上の特定のサイトに接続して値が存在するかどうかを確認し、ユーザーが入力しているときに提案を表示できるコンポーネントが必要です。そのためにSearchViewコンポーネントを使用したいのですが、いくつかの制限があることがわかりました。

  1. 開発者は、検索を処理する別のアクティビティを作成する必要があります。別のアクティビティを使用したくありません。サイトに接続して、ユーザーが入力した内容が存在するかどうかを確認したいだけです。

  2. 提案メカニズムを使用するには、開発者はコンテンツプロバイダーを構築する必要があります。繰り返しになりますが、DBに接続する必要はありません。標準のHTTPメッセージを使用してサイトに検索クエリを送信するだけでよく、そのためにコンテンツプロバイダーは必要ありません。

だから私の質問は:必要なカスタマイズでSearchViewコンポーネントを使用する方法はありますか、それともコンポーネントの要件を順守するだけでなく、必要なことを実行する醜い回避策を見つける必要がありますか?

ありがとう。

4

2 に答える 2

0

これは簡単。ユーザーがメニューボタンを長押しすると、アプリ内で検索するための検索クエリを入力できる検索テキストボックスが読み込まれるように、Googleの検索機能を使用する必要があります。

検索可能なアプリファイルには、ルートノードとして要素が含まれ、1つ以上の属性を指定する必要があります。例えば

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

次に、ACTION_SEARCHを受け入れるアクティビティを宣言します。

<application ... >
<activity android:name=".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>

次に、クエリとその実行方法を制御する必要があります。私はこれを自分のアプリに使用しています。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);

// Get the intent, verify the action and get the query
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
}
}

于 2012-08-24T16:05:30.407 に答える
0

UIスレッドでHTTPリクエストを実行しないでください。タイムリーに終了することを保証できないため、ロックされる可能性があります。少なくとも、runnableまたはASyncTaskで実行する必要があります。

簡単なダーティハックの方法が必要な場合は、ListFragmentを作成して、カスタムの提案を表示できます。次に、OnQueryTextListenerを作成して(またはアクティビティに実装させて)、SearchViewに設定します。次に、リスナーのメソッドonQueryTextChange(String text)で提案を生成し(Webサービスから取得する場合は、このメソッドでASyncTaskを開始します)、データでListFragmentAdapterを更新します。

于 2012-08-24T16:07:32.963 に答える