删除所有项目后如何重新加载列表视图?

How to reload list view after delete all item?

我有一个删除所有按钮,每次它删除列表视图中的所有项目时,列表视图不会出现但保持不变,它们只会在我创建新项目或重新启动时重新加载 activity .我在我的代码上打印了一个日志,似乎列表视图在调用 delete 方法之前重新加载。我的代码是这样的:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DBHelper db = new DBHelper(this);

    final ListView listView = (ListView) findViewById(R.id.listView);
    TextView empty = (TextView) findViewById(R.id.empty);

    ArrayList<Inventory> listArray = new ArrayList<>();
    listArray.clear();
    listArray = db.read();
    if (listArray.size() == 0) {
        empty.setText("No Items");
    } else {
        empty.setText("");
    }
    ListViewAdapter customAdapter = new ListViewAdapter(listArray);
    customAdapter.notifyDataSetChanged();
    listView.setAdapter(customAdapter);

    Button add_button = (Button) findViewById(R.id.button);
    add_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            addNewItem(view);
        }
    });

    Button button_deleteAll = (Button) findViewById(R.id.button_deleteAll);
    button_deleteAll.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            deteleAll();
            DBHelper db = new DBHelper(MainActivity.this);

            final ListView listView = (ListView) findViewById(R.id.listView);
            TextView empty = (TextView) findViewById(R.id.empty);

            ArrayList<Inventory> listArray = new ArrayList<>();
            listArray.clear();
            listArray = db.read();
            Log.v("arraysize:", String.valueOf(listArray.size()));
            if (listArray.size() == 0) {
                empty.setText("No Items");
            } else {
                empty.setText("");
            }
            ListViewAdapter customAdapter = new ListViewAdapter(listArray);
            customAdapter.notifyDataSetChanged();
            listView.setAdapter(customAdapter);
        }
    });
} 

方法deleteAll()删除了SQLite中的所有数据。 我想知道如何在调用此方法后重新加载列表视图,而不是在此方法之前重新加载。

估计没必要在按钮的OnClick方法中再次初始化customAdapter。也不需要再次设置适配器。

尝试在 onClick 方法中删除这些行。

希望这能解决您的问题。

在您的适配器中添加删除所有方法。每当单击按钮时调用适配器的 deleteAll 方法。 deleteAll 方法如下所示:

public void setListArray(ArrayList arrayList)
{
//assuming your adapter list is named "listArray"
this.listArray = arrayList;
notifyDataSetChanged();
}

然后在您的按钮中单击,只需编写以下代码:

    button_deleteAll.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    //assuming your list of itames here is named "mListArray"
    mListArray.clear();
    adapter.setListArray(mListArray);
    }
    }

只需将 notifyDataSetChanged(); 添加到您的适配器,在监听器中。例如:

  myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) {
           myArrayList.remove(position);
           myArrayAdapter.notifyDataSetChanged();
        }
    });