ขอถามหน่อยครับ ผมใช้listviewแล้วใช้onclick ด้วยswitch..case.. ใช้ค่า int arg2...

การสนทนาใน 'Android Developer' เริ่มโดย Sarawut Srisomchai, 15 กรกฎาคม 2013

< Previous Thread | Next Thread >
    ขอถามหน่อยครับ ผมใช้listviewแล้วใช้onclick ด้วยswitch..case.. ใช้ค่า int arg2 โดยที่ผมทำช่องค้นหาไว้ พอรันแล้วแบบปกติไม่มีอะไรเกิดขึ้น มันรันตามคำสั่งทุกอย่าง แต่พอค้นหาเท่านั้นแหละ มันใช้คำสั่้งของตอนไม่ได้ค้นหา สมมุติว่าลิสต์ผมมี26อัน เป็นA,B,C,....,Z ทำอีเวนต์ว่ากดA เข้ากูเกิลค้นหา"A" กดB เข้ากูเกิลค้นหา"B" ไปเรื่อยๆ แต่พอใส่Z ในช่องค้นหา มันค้นZมา แต่พอคลิก มันเป็นค้นหาA(คำสั่งตอนไม่ค้นตามค่า int arg2เลย) ผมต้องแก้ด้วยคำสั่งไหนหรือเพิ่มอะไรตรงไหนครับ นี่โค๊ดที่ใช้ครับ ประมาณนี้ String alphabet[] = {"A","B","C}; lv = (ListView) findViewById(R.id.list_view); inputSearch = (EditText) findViewById(R.id.inputSearch); // Adding items to listview adapter = new ArrayAdapter(this, R.layout.list_item, R.id.alphabet_name, alphabet); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { Intent intent; @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub switch (arg2) { case 0: intent = new Intent(Intent.ACTION_VIEW, Uri .parse("คำสั่ง")); startActivity(intent); break;
     
    น่าจะอยู่ที่คุณ อ่านค่าว่า นั่นคือ A คือ B ยังไง เพราะตัว Adapter มันมีการ Reuse ตัว Listitem ในมันใหม่ พูดคร่าวๆ คือ สมมติ หน้าจอนึง คุณ แสดงได้ 3 item A B C พอเราเลื่อนขึ้น A หายไปข้างบน D โผล่มาข้างล่าง สิ่งที่มันทำคือ เอา A ไปเปลี่ยนตัวหนังสือเป็น D แล้วเอามาใส่ข้างล่าง นี่คือการ Reuse ถ้าคุณไม่ได้เขียนให้มันอ่านตัวหนังสือ แต่คุณใช้วิธีฝังค่าเป็น Tag หรือวิธีอื่นไป คุณต้องลองดูว่าเวลามัน Reuse คุณได้ฝังค่าใหม่ลงไปแล้วหรือเปล่า เพราะจากตัวอย่างที่คุณบอกว่า กด Z แล้วมันเปิด A นี่อาจเป็นได้ว่า Z มันเกิดจาก เอา A มา Reuse แต่ค่าที่ฝังไว้ไม่ได้โดนเปลี่ยนตาม
     
< Previous Thread | Next Thread >

แบ่งปันหน้านี้