すべての行にimageviewsのリストがあります。一部の行ではそれらの画像を表示したいのですが、一部の行ではそれらを表示したくないので、カスタムListAdapterを使用します。
リスト行XMLには次のものがあります。
<ImageView
android:id="@+id/image1"
android:layout_height="fill_parent"
android:src="@drawable/button1"
android:visibility="invisible"/>
ご覧のとおり、デフォルトではすべての画像が非表示になっています。
カスタムSimpleAdapterで、状態を確認し、それに応じてこの行の画像を表示に設定します。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if(condition == true){
((ImageView) view.findViewById(R.id.image1)).setVisibility(View.VISIBLE);
}
return view;
}
だから私はすべての行に2つのImageViewsと3つのTextViewsを使ってこのようにやっています。ImageViewはデフォルトでは非表示であり、上記の条件に基づいて表示されます。TextVoewsは黒で、別の条件に基づいて別のテキストの色を取得します。
私の問題は、これは1〜5アイテム程度の小さなリストでは正常に機能しますが、リストが長くなると期待どおりに機能しないことです。結果が間違っている場合があり、同じデータに基づいてリストビューをリロードすると、毎回異なる結果が表示される場合があります。画像の設定が間違っているか、テキストの色が間違っています。
2番目の問題は、アダプターにフィルターを適用すると、これが完全かつ確実に失敗することです。EditTextフィールドがあり、このEditTextが変更されるたびにフィルターを適用したいので、そのEditTextにTextChangedListenerがあります。
edittext1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s);
}
});
このEditTextにフォーカスを設定した瞬間から、リストビュー全体が完全に変更され、条件ベースのフォーマットが「時々間違っている」だけでなく、「ロジックがまったくない」ようになりました。
これは、行を作成してアダプターを使用する正しい方法ですか?なぜこれが正しく機能しないのですか?また、フィルターを使い始めたときに完全に狂ってしまうのはなぜですか?
アドバンであなたの助けをどうもありがとう。