删除所有项目后如何重新加载列表视图?
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();
}
});
我有一个删除所有按钮,每次它删除列表视图中的所有项目时,列表视图不会出现但保持不变,它们只会在我创建新项目或重新启动时重新加载 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();
}
});