2017-06-10 3 views
-2

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; 
} 

}

+1

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

+1

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

+1

und wenn Sie über "sharedPreferences" sprechen, welche Beziehung besteht für 'favoritesList' zu' sharedPreferences'? – Opiatefuchs

Antwort

1

Wie Opiatefuchs oben gesagt, alles, was ich tun musste, war Bewegung Favorites = new Arraylist (Arrays.asList (Favoriten)); außerhalb von getView().

Verwandte Themen