ฉันกำลังหาวิธีซ่อนรายการหนึ่งในวิดเจ็ตสปินเนอร์ของ Android สิ่งนี้จะช่วยให้คุณสามารถจำลองสปินเนอร์โดยไม่ได้เลือกรายการใด ๆ และทำให้แน่ใจว่าการเรียกกลับ onItemSelected () จะถูกเรียกสำหรับทุกรายการที่เลือกเสมอ (หากรายการที่ซ่อนอยู่คือรายการ "ปัจจุบัน") โดยปกติจะมีรายการหนึ่งในสปินเนอร์ที่ไม่สร้างการเรียกกลับเสมอคือรายการปัจจุบัน
มีรหัสบางอย่างใน stackoverflow สำหรับวิธีปิดใช้งานรายการ (เป็นสีเทา) แต่ไม่ใช่วิธีการซ่อนรายการอย่างสมบูรณ์ราวกับว่าไม่มีอยู่จริง
หลังจากการทดลองหลายครั้งฉันได้พบกับโซลูชันที่ค่อนข้างแฮ็กซึ่งใช้ได้กับแพลตฟอร์ม Android ทั้งเก่าและใหม่ มีข้อบกพร่องเล็กน้อยเกี่ยวกับเครื่องสำอางซึ่งยากที่จะสังเกตเห็น ฉันยังอยากได้ยินวิธีแก้ปัญหาที่เป็นทางการมากกว่านี้นอกจาก "อย่าทำแบบนั้นด้วยสปินเนอร์"
สิ่งนี้จะซ่อนรายการแรกไว้ในตัวหมุนเสมอ แต่สามารถขยายได้อย่างง่ายดายเพื่อซ่อนรายการที่กำหนดเองหรือมากกว่าหนึ่งรายการ เพิ่มรายการจำลองที่มีสตริงว่างที่จุดเริ่มต้นของรายการสปินเนอร์ของคุณ คุณอาจต้องการตั้งค่าการเลือกสปินเนอร์ปัจจุบันเป็นรายการ 0 ก่อนที่กล่องโต้ตอบสปินเนอร์จะเปิดขึ้นซึ่งจะจำลองสปินเนอร์ที่ไม่ได้เลือก
ตัวอย่างการตั้งค่า Spinner ด้วยวิธี ArrayAdapter แทนที่:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
// Pass convertView as null to prevent reuse of special case views
v = super.getDropDownView(position, null, parent);
}
// Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling
parent.setVerticalScrollBarEnabled(false);
return v;
}
};
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);