[解決済み] AndroidでListViewを動的に更新する方法【非公開
質問
Androidでは、どのようにすれば
ListView
に基づいて動的に更新されます。
TextView
の値ですか?
このようなものを探しています。
-------------------------
| Text View |
-------------------------
| List item |
| List item |
| List item |
| List item |
| |
| |
| |
| |
-------------------------
解決方法は?
まず、EditTextとListViewの両方を持つXMLレイアウトを作成する必要があります。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Pretty hint text, and maxLines -->
<EditText android:id="@+building_list/search_box"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="type to filter"
android:inputType="text"
android:maxLines="1"/>
<!-- Set height to 0, and let the weight param expand it -->
<!-- Note the use of the default ID! This lets us use a
ListActivity still! -->
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
</LinearLayout>
これで、ListViewの上にEditTextが表示され、すべてが適切にレイアウトされます。次に、通常と同じようにListActivityを作成します。
setContentView()
の呼び出しは
onCreate()
メソッドを使用して、最近宣言したレイアウトを使用するようにします。私たちは
ListView
で、特に
android:id="@android:id/list"
. これによって
ListActivity
を知ることができます。
ListView
は、宣言されたレイアウトで使用したいものです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filterable_listview);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
getStringArrayList());
}
今、アプリを実行すると、以前の
ListView
の上に、素敵なボックスがあります。このボックスに何かをさせるには、ボックスからの入力を受け取り、その入力をリストでフィルタリングする必要があります。多くの人がこれを手作業で行おうとしています。
もっとも
ListView
Adapter
クラスには
Filter
オブジェクトを使用すると、自動的にフィルタリングを実行することができます。からの入力をパイプで送るだけです。
EditText
を
Filter
. それはかなり簡単であることが判明した。簡単なテストを行うには、次の行をあなたの
onCreate()
コール
adapter.getFilter().filter(s);
を保存する必要があることに注意してください。
ListAdapter
を変数に保存しています。
ArrayAdapter<String>
を'adapter'という変数に格納しています。
次のステップでは、入力を
EditText
. これには、実はちょっとした工夫が必要です。この場合
OnKeyListener()
に
EditText
. しかし、このリスナーが受け取るのは
一部のキーイベント
. 例えば、ユーザーが「wyw」と入力した場合、予測入力では「eye」が推奨される可能性が高いです。ユーザーが「wyw」または「eye」のどちらかを選択するまで、あなたの
OnKeyListener
はキーイベントを受け取りません。この方法を好む人もいるかもしれませんが、私は不満に感じました。私はすべてのキーイベントが欲しいので、フィルタリングするかしないかの選択を迫られました。この解決策は
TextWatcher
. を作成し、追加するだけです。
TextWatcher
を
EditText
を渡すと
ListAdapter
Filter
は、テキストが変更されるたびにフィルタリングのリクエストを行います。を削除することを忘れないでください。
TextWatcher
で
OnDestroy()
! これが最終的な解答です。
private EditText filterText = null;
ArrayAdapter<String> adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filterable_listview);
filterText = (EditText) findViewById(R.id.search_box);
filterText.addTextChangedListener(filterTextWatcher);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
getStringArrayList());
}
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s);
}
};
@Override
protected void onDestroy() {
super.onDestroy();
filterText.removeTextChangedListener(filterTextWatcher);
}
関連
-
repo: コマンドが見つかりません
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] 初期テキストが「Select One」のAndroidスピナーを作るには?
-
[解決済み] AndroidのPull-to-Refreshの実装方法
-
[解決済み] AndroidでlistViewのアイテム間にスペースを設定する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Androidのadbデバイスがオフラインであることが判明
-
armeabi-v7a armeabi arm64-v8a パラメータの意味説明
-
AndroidStudio reports Could not resolve all artifacts for configuration ':app:classpath'.
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
エラーが発生しました。ArrayAdapter は、リソース ID が TextView である必要があります。
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
AndroidでListViewを使ってカスタムテーブルを描画する