【问题标题】:How to reload list view after delete all item?删除所有项目后如何重新加载列表视图?
【发布时间】:2017-02-17 20:05:52
【问题描述】:

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

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 中的所有数据。 我想知道如何在调用此方法后重新加载列表视图,而不是在此方法之前重新加载。

【问题讨论】:

    标签: android listview reload


    【解决方案1】:

    我想没有必要在按钮的 OnClick 方法中再次初始化 customAdapter。也无需再次设置适配器。

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

    希望这能解决您的问题。

    【讨论】:

      【解决方案2】:

      在您的适配器中添加删除所有方法。每当单击按钮时调用适配器的 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);
          }
          }
      

      【讨论】:

        【解决方案3】:

        只需将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();
                }
            });
        

        【讨论】:

          猜你喜欢
          • 2019-08-28
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多