Select and delete multiple items in a list in Sketchware android project
1. In image manager of project, add delete icon ic_delete_white.
2. In Resource, in menu folder, add an xml file named context_menu.xml. Put following code in this file:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/delete"
android:title="Delete"
android:icon="@drawable/ic_delete_white"
android:showAsAction="always"/>
</menu>
3. Create a new custom variable of type SparseBooleanArray with name selectedItems and define it as new SparseBooleanArray().
4. Put following codes in onCreate. Change names of variables as in your project.
// Enable multiple selection mode with contextual action bar
listview1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
// Handle selection events via MultiChoiceModeListener
listview1.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
// Update the selection map based on user interaction
if (checked) {
selectedItems.put(position, true); // Mark item as selected
} else {
selectedItems.delete(position); // Unmark item
}
// Refresh the adapter to visually highlight selected items
((BaseAdapter)listview1.getAdapter()).notifyDataSetChanged();
// Update the ActionMode title with the number of selected items
mode.setTitle(selectedItems.size() + " selected");
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate the contextual menu (e.g., delete option)
getMenuInflater().inflate(R.menu.context_menu, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Handle clicks on contextual menu items
if (item.getItemId() == R.id.delete) {
// Loop backwards to safely remove selected items
for (int i = listview1.getCount() - 1; i >= 0; i--) {
if (selectedItems.get(i)) {
maplist.remove(i); // Remove item from data list
}
}
// Clear selection and update UI
selectedItems.clear();
((BaseAdapter)listview1.getAdapter()).notifyDataSetChanged();
// Save updated list to SharedPreferences as JSON
sp.edit().putString("data", new Gson().toJson(maplist)).commit();
// Close action mode
mode.finish();
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// Clear selection and refresh UI when action mode ends
selectedItems.clear();
((BaseAdapter)listview1.getAdapter()).notifyDataSetChanged();
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// Not used here, return false
return false;
}
});
5. In onBindCustomView, if selectedItems.get(_position, false), change background colour of outermost linear in custom view.
6. Save and run the project.
Comments
Post a Comment