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

时间:2016-10-09 06:29:15

标签: android listview reload

我有一个删除所有按钮,每次删除列表视图中的所有项目时,列表视图都不会在路上但保持不变,只有在我创建新项目或重新启动此活动时才会重新加载。我在我的代码上打印了一个日志,看起来列表视图在调用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中的所有数据。 我希望知道如何在调用此方法后重新加载listview,而不是在此方法之前重新加载。

3 个答案:

答案 0 :(得分:0)

我想没有必要在按钮OnClick方法中再次初始化customAdapter。也不需要再次setAdapter。

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

希望这可以解决您的问题。

答案 1 :(得分:0)

在适配器中添加delete all方法。单击按钮时调用适配器的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);
    }
    }

答案 2 :(得分:0)

只需将 myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id) { myArrayList.remove(position); myArrayAdapter.notifyDataSetChanged(); } }); 添加到您的适配器,在监听器内。例如:

{{1}}