listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
View v;
int count = parent.getChildCount();
v = parent.getChildAt(position);
parent.requestChildFocus(v, view);
v.setBackground(res.getDrawable(R.drawable.transparent_button));
for (int i = 0; i < count; i++) {
if (i != position) {
v = parent.getChildAt(i);
v.setBackground(res.getDrawable(R.drawable.not_clicked));
}
}
}
});
โดยพื้นฐานแล้วให้สร้างDrawablesสองรายการ- อันที่โปร่งใสและอีกสีหนึ่งเป็นสีที่ต้องการ ขอโฟกัสที่ตำแหน่งที่คลิก ( int position
ตามที่กำหนด) และเปลี่ยนสีของแถวดังกล่าว จากนั้นเดินผ่านผู้ปกครองListView
และเปลี่ยนแถวอื่น ๆ ทั้งหมดตามนั้น บัญชีนี้ใช้เมื่อผู้ใช้คลิกlistview
หลาย ๆ ครั้ง สิ่งนี้ทำได้ด้วยเค้าโครงที่กำหนดเองสำหรับแต่ละแถวในไฟล์ListView
. (ง่ายมากเพียงสร้างไฟล์เลย์เอาต์ใหม่ด้วยไฟล์TextView
- อย่าตั้งค่าที่โฟกัสได้หรือคลิกได้!)
ไม่ต้องใช้อะแดปเตอร์แบบกำหนดเอง - ใช้ ArrayAdapter
firstPosition
ควรได้รับint firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
การแก้ไขนี้