ListView'de öğeleri görüntülemek için özelleştirilmiş bir BaseAdapter kullanıyorum. Öğeler bir ArrayList'te tutulan dizelerdir. Özel bir BaseAdapter kullanarak bir ListView öğesinden silme
liste öğeleri
üzerlerinde bir silme düğmesi (büyük kırmızı X) var ve ben ArrayList'den öğeyi kaldırmak ve kendisini güncellemek için ListView bildirmek istiyorum.Ancak, ben denedim her uygulama madde 5 en silecektir madde 2'nin silme düğmesine tıklayarak nedenle örneğin, kendisine verilen gizemli pozisyon numaralarını alır. Neredeyse tamamen rastgele görünüyor. Unutulmaması gereken
bir şey elemanları tekrarlanabilir, ancak aynı sırada tutulmalıdır olmasıdır. Mesela ben elemanlar 3 olarak, "İrlanda" iki kere olabilir ve 7.
Benim kod aşağıda:
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;
}
Daha sonra etiketi kapma tarafından silindi elementin pozisyonunu alma denemesinde, ancak her zaman var listede yanlış pozisyon. Burada verilen pozisyonda göze çarpan bir model yoktur, her zaman rasgele görünür.
// The delete button's listener
public void onClick(View v) {
ViewHolder deleteHolder = (ViewHolder) v.getTag();
int pos = deleteHolder.position;
...
...
...
}
Sadece ArrayList'den öğeyi silmek ve ListView kendisini güncellemek için oldukça mutlu olurdu, ama ben alıyorum pozisyon yüzden bunu yapamam yanlıştır.
İlk başta, GetView yöntemi içinde deleteButton clickListener var yaptı ve değerini silmek için 'pozisyon' kullanılmış lütfen unutmayın ama aynı problem vardı.herhangi bir öneriniz bu gerçekten beni rahatsız edici, takdir.
Parlak, teşekkürler. Böyle aptalca bir problem için çok uzun zaman harcadığıma inanamıyorum. Genel çözümümüzü, ilgilenenler için ayrı bir cevap olarak ekledim. – HXCaine