Multiple selection Android + mysql
Bonjour,
Je suis en train de finir de développer une application Android mais je me heurte a un problème depuis prés d'un mois et que je n'arrive a résoudre
Explication :
J'ai une corbeille. Dans cette corbeille, il y a la possibilité de sélectionner plusieurs items afin soit de les restaurer ou de les supprimer définitivement
La multiple sélection fonctionne bien mais quand l'utilisateur appuie sur "RESTAURER" ou l'icone de la corbeille, il y a uniquement la première données de la sélection qui est supprimée (l'interface supprime correctement toute les données sélectionnées mais pas dans la base de données mysql)
Voici ma classe MultiSelectRecycleViewAdapter
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
public class MultiSelectRecycleViewAdapter extends SelectableAdapter<MultiSelectRecycleViewAdapter.ViewHolder> implements Filterable {
public ArrayList<Book> book, filterList;
private Context mContext;
SearchMultiSelect filter;
private ViewHolder.ClickListener clickListener;
public MultiSelectRecycleViewAdapter(Context context, ArrayList<Book> book, ViewHolder.ClickListener clickListener) {
this.book = book;
this.mContext = context;
this.clickListener = clickListener;
this.filterList = book;
}
// Create new views
@Override
public MultiSelectRecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.content_trash, null);
ViewHolder viewHolder = new ViewHolder(v, clickListener);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.txtBookId.setText(book.get(position).getId());
viewHolder.txtTitle.setText(book.get(position).getTitleBook());
viewHolder.txtInfo.setText(book.get(position).getBookDate());
Picasso.with(mContext).load(book.get(position).getImage()).resize(225, 307).into(viewHolder.image);
viewHolder.selectedOverlay.setVisibility(isSelected(position) ? View.VISIBLE : View.INVISIBLE);
}
@Override
public int getItemCount() {
return book.size();
}
@Override
public Filter getFilter() {
if (filter == null) {
filter = new SearchMultiSelect(filterList, this);
}
return filter;
}
public void removeItem(int position) {
book.remove(position);
notifyItemRemoved(position);
}
public void removeItems(List<Integer> positions) {
// Reverse-sort the list
Collections.sort(positions, new Comparator<Integer>() {
@Override
public int compare(Integer lhs, Integer rhs) {
return rhs - lhs;
}
});
// Split the list in ranges
while (!positions.isEmpty()) {
if (positions.size() == 1) {
removeItem(positions.get(0));
positions.remove(0);
} else {
int count = 1;
while (positions.size() > count && positions.get(count).equals(positions.get(count - 1) - 1)) {
++count;
}
if (count == 1) {
removeItem(positions.get(0));
} else {
removeRange(positions.get(count - 1), count);
}
for (int i = 0; i < count; ++i) {
positions.remove(0);
}
}
}
}
private void removeRange(int positionStart, int itemCount) {
for (int i = 0; i < itemCount; ++i) {
book.remove(positionStart);
}
notifyItemRangeRemoved(positionStart, itemCount);
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public TextView txtTitle, txtBookId, txtInfo;
public ImageView image;
private ClickListener listener;
private final CheckBox selectedOverlay;
public ViewHolder(View itemLayoutView, ClickListener listener) {
super(itemLayoutView);
this.listener = listener;
txtBookId = (TextView) itemView.findViewById(R.id.book_id);
txtTitle = (TextView) itemView.findViewById(R.id.header_title);
txtInfo = (TextView) itemView.findViewById(R.id.info);
image = (ImageView) itemView.findViewById(R.id.image);
selectedOverlay = (CheckBox) itemView.findViewById(R.id.selected_overlay);
itemLayoutView.setOnClickListener(this);
itemLayoutView.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
if (listener != null) {
listener.onItemClicked(getAdapterPosition());
}
}
@Override
public boolean onLongClick(View view) {
if (listener != null) {
return listener.onItemLongClicked(getAdapterPosition());
}
return false;
}
public interface ClickListener {
void onItemClicked(int position);
boolean onItemLongClicked(int position);
}
}
} |
Et voici le morceau ou je suis bloqué
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| @Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
txtBookId = (TextView) findViewById(R.id.book_id);
HashMap<String, String> user = db.getUserDetails();
String uid = user.get("uid");
switch (item.getItemId()) {
case R.id.action_empty:
/* DeleteBook(txtBookId.getText().toString(), uid);*/
mAdapter.removeItems(mAdapter.getSelectedItems());
mode.finish();
return true;
case R.id.action_restaure:
for (int i = 0; i < mAdapter.getItemCount() - 1; i--)
{
}
/*RestoreBook(txtBookId.getText().toString(), uid);*/
mAdapter.removeItems(mAdapter.getSelectedItems());
mode.finish();
return true;
default:
return false;
}
} |
Pour supprimer la données ou la restaurer, il faut que je récupère l'id de celle ci. Seul le premier item de la sélection j'arrive a récupérer l'id mais pas les suivantes
Merci de votre aide :)