Löschen von Elementen aus einem ListView-Steuerelement mit einem benutzerdefinierten BaseAdapter

Ich bin mit einem individuellen BaseAdapter für die Anzeige von Elementen auf einer ListView. Die Elemente sind nur strings statt in einer ArrayList.

Die Elemente der Liste haben eine Schaltfläche "löschen" auf Sie (rotes X), und ich möchte Sie entfernen das Element aus der ArrayList, und Benachrichtigen Sie den ListView selbst aktualisieren.

Jedoch jede Implementierung, die ich habe versucht, bekommt mysteriöse position zahlen gegeben, so zum Beispiel Klick auf Punkt 2 der Schaltfläche löschen löschen Sie die Ziffer 5 ist. Es scheint fast völlig zufällig.

Eine Sache zu beachten ist, dass Elemente dürfen wiederholt werden, aber aufbewahrt werden müssen, in der gleichen Reihenfolge. Zum Beispiel, kann ich "Irish" zweimal, da die Elemente 3 und 7.

Mein code ist unten:

private static class ViewHolder {
        TextView lang;
        int position;
}

public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.language_link_row, null);
        holder = new ViewHolder();
        holder.lang = (TextView)convertView.findViewById(R.id.language_link_text);
        holder.position = position;

        final ImageView deleteButton = (ImageView) 
                convertView.findViewById(R.id.language_link_cross_delete);
        deleteButton.setOnClickListener(this);

        convertView.setTag(holder);
        deleteButton.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.lang.setText(mLanguages.get(position));

    return convertView;
}

Ich später versuchen, um die gelöschten element die position, indem Sie den tag, aber es ist immer die falsche position in der Liste. Es gibt keine auffälligen Muster an der position, die hier gegeben werden, es scheint immer zufällig.

//The delete button's listener
public void onClick(View v) {

    ViewHolder deleteHolder = (ViewHolder) v.getTag();
    int pos = deleteHolder.position;

    ...
    ...
    ...
}

Ich wäre sehr glücklich, löschen Sie einfach das Objekt aus der ArrayList und die ListView-update selbst, sondern die position, die ich bin immer falsch ist, so kann ich das nicht.

Bitte beachten Sie, dass ich habe, auf den ersten, haben die deleteButton clickListener innerhalb der getView-Methode und verwendet, 'position', um zu löschen den Wert, aber ich hatte das gleiche problem.

Anregungen geschätzt, das ist wirklich reizt mich.

InformationsquelleAutor HXCaine | 2011-01-04
Schreibe einen Kommentar