1

いくつかの ListItems が入力されたリスト ビューがあります。「すべてのアイテムを削除」ボタンを含むオプションメニューもあります。このボタンを押すと、デフォルト以外のすべてのアイテムを削除するメソッドが呼び出され、ListView も更新されます。これはメニューコードです:

public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId())
    {
        ...
        case R.id.optMenuDeleteAllCategories:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Are you sure you want to delete all categories?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    **deleteAllCategories();**
                }

これはdeleteAllCategories()方法です:

 public void deleteAllCategories()
{
    manager.deleteAllCategories();
    adapter.notifyDataSetChanged();
}

したがって、すべてが削除されますが、ListView は更新されません。変更を確認するには、アプリを終了して再度開く必要があります。adapter.notifyDataSetChanged();また、メソッドを呼び出した直後に行を配置しようとしましたdeleteAllCategoriesが、ListView はまだ更新されませんでした。

では、アプリを終了せずに更新するにはどうすればよいですか?

4

1 に答える 1

2

deleteAllCategoriesメソッド内でadapter.clear()を呼び出して、リストからアイテムも削除します。

編集:ArrayAdapterは、渡したものとは異なるリストインスタンスで内部的に機能します。したがって、元のリスト内のオブジェクトへの変更は反映されますが、渡したArrayListへの変更はアダプターに表示されません。

アダプタのリストを変更するには、ArrayAdapterのadd、insert、remove、およびclearメソッドを使用する必要があります。

于 2012-10-24T13:58:47.390 に答える