Как перезагрузить просмотр списка после удаления всех элементов?

#android #listview #reload

#Android #просмотр списка #перезагрузка

Вопрос:

У меня есть кнопка «Удалить все», и каждый раз, когда она удаляет все элементы в listview, listview не будет отображаться, но останется прежним, они будут перезагружаться только тогда, когда я создам новый элемент или перезапущу это действие. Я распечатал журнал в своем коде, и кажется, что просмотр списка перезагружается перед вызовом метода удаления. мой код такой:

 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 после вызова этого метода, а не перезагружать перед этим методом.

Ответ №1:

добавьте метод удаления всех в свой адаптер. вызывайте метод 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:

Я думаю, нет необходимости снова инициализировать customAdapter в методе button OnClick. Также нет необходимости снова устанавливать адаптеру.

Попробуйте удалить эти строки в методе onClick.

Надеюсь, это исправит вашу проблему.

Ответ №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();
        }
    });