ฉันมี ListView
พร้อมอะแดปเตอร์แบบกำหนดเองที่ขยาย BaseAdapter
และมีมุมมอง 2 ประเภท เมื่อฉันเรียกใช้เมธอด adapter.removeRow(position)
ข้อมูลสำหรับอะแดปเตอร์ได้รับการอัปเดตอย่างถูกต้อง และรายการสะท้อนถึงสิ่งนี้ แต่ประเภทมุมมองไม่ได้รับการอัปเดตอย่างถูกต้อง อะแดปเตอร์ได้รับการสนับสนุนจาก
ArrayList<Map<String, String>> rows = new ArrayList<Map<String, String>>();
และฉันมีเซตย่อย
List<Integer> flashSet = new ArrayList<Integer>();
ซึ่งเป็นรายการตำแหน่งทั้งหมดที่เป็นของ ViewType 1 (ตรงข้ามกับประเภทมุมมองมาตรฐาน 0)
นี่คือวิธีอะแดปเตอร์ removeRow(position)
ของฉัน:
public void removeRow(int position) {
if (getItemViewType(position) == TYPE_FLASH) {
flashSet.remove(position);
}
for (int flashPosition:flashSet) {
System.out.println(tag+"is "+flashPosition+" going to be moved?");
if (flashPosition > position) {
flashPosition -= 1;
System.out.println(tag+"Yes! It's been moved to "+flashPosition);
}
}
rows.remove(position);
notifyDataSetChanged();
}
นี่คือวิธี getView
ของฉัน:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
FlashHolder flashHolder;
ClipHolder clipHolder;
int type = getItemViewType(position);
if (convertView == null) {
if (type == TYPE_CLIP) {
convertView = rowInflater.inflate(R.layout.clip_note_row_layout, null);
clipHolder = new ClipHolder();
flashHolder = null;
clipHolder.textView = (TextView)(convertView.findViewById(R.id.clip_text));
convertView.setTag(clipHolder);
} else {
convertView = rowInflater.inflate(R.layout.flash_row_layout, null);
clipHolder = null;
flashHolder = new FlashHolder();
flashHolder.front = (TextView)(convertView.findViewById(R.id.flash_text));
flashHolder.back = (TextView)(convertView.findViewById(R.id.clip_text));
convertView.setTag(flashHolder);
}
} else {
if (type == TYPE_CLIP) {
clipHolder = (ClipHolder)convertView.getTag();
flashHolder = null;
} else {
clipHolder = null;
flashHolder = (FlashHolder)convertView.getTag();
}
}
if (type == TYPE_CLIP) {
clipHolder.textView.setText(rows.get(position).get("clip"));
} else {
flashHolder.front.setText(rows.get(position).get("flash_text"));
flashHolder.back.setText(rows.get(position).get("clip"));
}
return convertView;
}
ฉันรู้ว่าฉันสามารถสร้าง adapter
ใหม่ ให้อัปเดต ArrayList
และโทร listView.setAdapter(adapter)
ได้ แต่ดูเหมือนว่าจะเกินกำลังทั้งหมดเมื่อฉันพยายามลบหนึ่งรายการออกจากรายการที่อาจยาว ดูภาพก่อนและหลังการลบ:
จากนั้นฉันจะลบรายการแรก คำว่า "ซึ่ง" ซ่อนอยู่หลังรายการ "มาดูกัน" และตอนนี้รายการ "แรงบันดาลใจจาก…" ซ่อนอยู่หลังรายการว่าง 3.
ข้อมูลกำลังอัปเดต แต่ประเภทข้อมูลพร็อพเพอร์ตี้กลับไม่เป็นเช่นนั้น ขอบคุณสำหรับความช่วยเหลือ!
getViewTypeCount()
และgetItemViewType()
ในอะแดปเตอร์ของคุณหรือไม่? - person M-WaJeEh   schedule 13.03.2013{
และ}
ในgetView()
โปรดอัปเดตคำถามของคุณหากไม่ใช่ข้อผิดพลาดในการเขียนโค้ด - person M-WaJeEh   schedule 13.03.2013