2

私はSOを深く掘り下げましたが、他の人が私のものと同様の質問をしているのを見つけましたが、私が抱えているのと同じ問題に対処する質問はまだ見つかりません. 私も満足のいく答えを見つけていません。

私はリストビューを持っています。アダプタから .notifyDataSetChanged を呼び出すと、ListView が更新されますが、onResume() が呼び出されると更新が表示されます。つまり、活動を離れてカムバックした後、すぐにそれを見ることはありません。

更新をすぐに確認するにはどうすればよいですか? .notifyDataSetChanged メソッドを試しましたが、アダプターをリセットしようとしましたが、何も機能しませんでした。

4

1 に答える 1

1

あなたのコメントによると、アダプター内の配列を更新するのではなく、一度アダプターに渡したアクティビティによって保持される配列を更新します。これが、アダプターが正しく更新されない理由です。アダプター クラスの外部で配列を変更しています。これは、アダプターが使用している配列オブジェクトと同じではない可能性があります。onResume() で、アダプタが新しい配列で再作成され、新しいコンテンツが表示されます。

解決策は、次のカスタム Adapter クラスを使用することです。

class MyAdapter extends BaseAdapter {

    private Array[] myArray;

    public MyAdapter(Array[] myArray) {
        this.myArray = myArray;
    }

    public updateContent(Array[] myNewArray) {
        this.myArray = myNewArray;
        this.notifyDataSetChanged();
    }

    // your getItem, getView, and so on methods 
}

次に、アクティビティから、新しい配列で myArray.updateContent() を呼び出すだけで、すぐに更新されます。


あるクラス (アダプタ) から使用されるオブジェクトを別のクラス (アクティビティ) 内で保持および操作することは決して適切ではありません。配列を操作するためのすべてのコードをアダプターに移動し、メソッドを使用してアイテムを追加/削除するようにしてください。これにより、この種のエラーを簡単に見つけることができます。

于 2013-08-15T15:15:02.483 に答える