#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();
}
});