2

問題があります。メインのアクティビティには ListView があります。そして、このアクティビティに戻るたびに更新する必要があります。これには onResume() メソッドを使用します。

@Override
protected void onResume() {
    super.onResume();
    refreshCategoriesList();
}

private void refreshCategoriesList() {
        // ...
        categoriesListAdapter = new CategoryListItemAdapter(
            this, R.layout.category_item,
            categories
        );
        categoriesListView.setAdapter(categoriesListAdapter);
}

ご覧のとおり、ListView のデータを変更するために、ArrayAdapter から拡張されたリフレッシュ アダプターを使用します。

しかし、場合によっては、このリストを最後までスクロールする必要があります。それに新しいアイテムを追加するとき。そして、これには onActivityResult(...) メソッドを使用します。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // ...
        refreshCategoriesList();

        categoriesListView.setSelection(categoriesListAdapter.getCount() - 1);
}

しかし、私には1つの問題があります。リストに新しいアイテムを追加すると、このメソッドの両方が onActivityResult(...) の順に実行され、その後 onResume() が実行されます。そして、私が持っています:

  1. refreshCategoriesList() を使用して時間に更新されたリスト データ (ただし、主な問題ではありません)。
  2. onResume() の実行後、最初のアイテムの位置に復元されたリストの最後までスクロールしました:(問題です。新しいアイテムを追加するときに、リストを最後までスクロールしたいからです。

この問題を解決するにはどうすればよいですか。場合によっては、onActivityResult(...) メソッド (リストをスクロールする必要がある場合) のみを呼び出し、他の onResume() メソッド (単にリスト データを更新する場合) を呼び出すことはできますか?

4

1 に答える 1

2

毎回アダプターを再作成する代わりに、ArrayAdapter の notifyDataSetChanged() メソッドを使用できます。

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
于 2012-05-08T15:24:53.630 に答える