6

データを動的に変更する Android アプリケーションに ListView があります。このメソッドを使用してonFilterComplete()、ListView の内容を変更します。

Pre Ice Cream Sandwhich 次のコードは正常に動作します。

if(adapter != null) {

  adapter.notifyDataSetInvalidated();
  lview3.invalidateViews();

  adapter.getFilter().filter(aa1.getItem(item), new Filter.FilterListener() {
  public void onFilterComplete(int count) {
    adapter.notifyDataSetChanged();

    if(lview3.getCount() == 0){
      lview3.setVisibility(View.GONE);                                     
    }
    else{
      lview3.setVisibility(View.VISIBLE);
    }
}});

ただし、フィルターを使用すると画面が適切に更新されないアイス クリーム サンドでは、フィルターが以前の ListView よりも少ない数のエントリを返す場合、古いリスト データはバックグラウンドでまだ表示されているように見えます。このスクリーンショット:

ここに画像の説明を入力

スクリーン ショットから、ListView の最初のエントリがどこにあるかを確認できます。表示されるのはこれだけです。以前の結果が下にまだ表示されている場所を確認できます。画面が正しく更新されていないかのようです。

ホームボタンを選択してホーム画面からアプリケーションを終了し、戻ると、次のスクリーンショットのようにすべてが表示されます。

ここに画像の説明を入力

Ice Cream Sandwhich の ListView を適切に更新するために実装する必要があるものは他にありますか? 他の誰かが同様の問題に遭遇しましたか?

私が持っているものは、ICSの前にうまく機能します。

4

1 に答える 1

0

これを修正するために、コードを次のように変更しました。

if(adapter != null) {
  adapter.getFilter().filter(aa1.getItem(item), new Filter.FilterListener() {
  public void onFilterComplete(int count) {
    adapter.notifyDataSetChanged();

    if(lview3.getCount() == 0){
      lview3.setVisibility(View.GONE);                                     
    }
    else{
      lview3.setVisibility(View.VISIBLE);
      decLayout.invalidate();
    }
}});

decLayout はリスト ビューが含まれる相対的なレイアウトですが、リスト ビューのデータが変更されたときに画面が正しく更新されるようです。

これは機能しますが、有効な修正であると 100% 確信できるわけではありません。これと同様の問題を抱えていて、適切な修正がある可能性がある他の人からの連絡をお待ちしています。

于 2012-06-18T16:08:22.053 に答える