Ich habe eine Listview in einer meiner Aktivitäten, die eine Lösch-Schaltfläche innerhalb jeder Zeile hat. Wenn ich auf die Löschen-Schaltfläche klicke, möchte ich diesen Zeilenwert aus zwei verschiedenen Arrays entfernen. Das erste Array ist das Listen-Array, das die Informationen in der Listenansicht anzeigt, und das zweite Array ist für mein sharedPreference-Array, bei dem es sich um die Daten handelt, die die Listenansicht füllen. Dies funktioniert beim ersten Mal, wenn ich es ausführe, aber wenn ich versuche, mehr als eine Zeile zu löschen, ohne die Ansicht neu zu erstellen, wird es nicht funktionieren.Array.remove() arbeitet nicht mehr als einmal in onClickListener()
Hier ist mein Code: Ich klicken Sie auf die Schaltfläche Löschen in einer Reihe
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//this will delete the row from the list view
list.remove(position);
//this deletes the value from the sharedPreference
favoritesList.remove(position);
notifyDataSetChange();
}
}
Das die feinen beim ersten Mal funktioniert, aber wenn ich eine andere Zeile löschen möchten, klicken ich auf die Schaltfläche Löschen auf einer anderen Zeile und Während die Zeile aus der Listenansicht entfernt wird, wird sie nicht aus meinem favouritesList-Array entfernt. Das bedeutet, dass die favoritesList.remove (Position) nur das erste Mal funktioniert. Es ist fast wie favoritesList wird nicht aktualisiert und versucht nur den gleichen Wert zu entfernen, egal in welcher Zeile ich klicke. Was ist seltsam, weil list.remove (Position) funktioniert gut.
Also wie bekomme ich favoritesList (Position) mehr als einmal zu laufen, ohne zu brechen? Ich kann mehr Code posten, wenn es sein muss, aber ich dachte, das wäre genug. Jede Hilfe wird geschätzt. Vielen Dank! Hier
ist der ganze kundenspezifische Adapter für meine Listenansicht:
public class ItemCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
ArrayList<String> favoritesList;
private Context context;
//private final SharedPreferences sharedPrefs;
String[] favorites;
public ItemCustomAdapter(ArrayList<String> list, Context context, String[] favorites) {
this.list = list;
this.context = context;
this.favorites = favorites;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
return 0;
//just return 0 if your list items do not have an Id variable.
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//System.out.println(favoritesList);
favoritesList = new ArrayList<String>(Arrays.asList(favorites));
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_list_view, null);
}
//Handle TextView and display string from your list
TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
listItemText.setText(list.get(position));
//Handle buttons and add onClickListeners
ImageButton deleteBtn = (ImageButton)view.findViewById(R.id.delete_btn);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
favoritesList.remove(position);
notifyDataSetChanged();
}
});
return view;
}
}
Jemand möchte diese Frage schließen, sie ist als Off-Thema markiert (scheint keine Programmierfrage zu sein). Warum? Es sieht aus wie eine Programmierfrage ... – Opiatefuchs
vielleicht setzen Sie den falschen Wert für die Position. Können Sie zeigen, wie Sie den 'Position'-Wert erhalten, und können Sie Ihre FavoritesList-Initialisierung anzeigen? – Opiatefuchs
und wenn Sie über "sharedPreferences" sprechen, welche Beziehung besteht für 'favoritesList' zu' sharedPreferences'? – Opiatefuchs