[解決済み] AutoCompleteTextView を使用して、Web API からのデータを入力するにはどうすればよいですか?
2023-05-28 22:44:30
質問
私は
AutoCompleteTextView
を使用し、Web APIを照会することによってユーザーが入力するときにデータを入力したいと思います。 これを行うにはどうすればよいですか?
私は新しいクラスを作成し、オーバーライド
AutoCompleteTextView.performFiltering
あるいは、カスタムのリストアダプタを使用し、カスタムの
android.widget.Filter
を用意して、performFiltering をオーバーライドするのでしょうか?
または、私の最終目標を得るためのより良い方法がありますか?
私は似たようなことをしたことがありますが、それはクイック検索ボックスのためのもので、サービスを実装することを含んでいました。
どのように解決するのですか?
私は解決策を思いつきました。それが最善の解決策であるかどうかは分かりませんが、非常にうまく機能しているように見えます。 私が行ったのは、ArrayAdapter を継承したカスタム アダプターを作成することです。 このカスタムアダプタでは、getFilter をオーバーライドし、 performFiltering をオーバーライドする独自の Filter クラスを作成しました。 これは新しいスレッドを起動するので、UI を中断させることはありません。 以下は素の例です。
MyActivity.java
public class MyActivity extends Activity {
private AutoCompleteTextView style;
@Override
public void onCreate(Bundle savedInstanceState) {
...
style = (AutoCompleteTextView) findViewById(R.id.style);
adapter = new AutoCompleteAdapter(this, android.R.layout.simple_dropdown_item_1line);
style.setAdapter(adapter);
}
}
AutoCompleteAdapter.java
public class AutoCompleteAdapter extends ArrayAdapter<Style> implements Filterable {
private ArrayList<Style> mData;
public AutoCompleteAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
mData = new ArrayList<Style>();
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Style getItem(int index) {
return mData.get(index);
}
@Override
public Filter getFilter() {
Filter myFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint != null) {
// A class that queries a web API, parses the data and returns an ArrayList<Style>
StyleFetcher fetcher = new StyleFetcher();
try {
mData = fetcher.retrieveResults(constraint.toString());
}
catch(Exception e) {
Log.e("myException", e.getMessage());
}
// Now assign the values and count to the FilterResults object
filterResults.values = mData;
filterResults.count = mData.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint, FilterResults results) {
if(results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}
};
return myFilter;
}
}
関連
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] Androidでインテントから余分なデータを取得するにはどうすればよいですか?
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] HttpPostによる画像送信
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] WhatsAppでメッセージを送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] HttpPostによる画像送信
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] グリッドビューの高さが削減される