2013-11-28 6 views
5

फिर उजागर नहीं करता मैं ListView सेट के रूप में एक:performItemClick आइटम

navMenu = (ListView) findViewById(R.id.list_menu_nav); 
navMenu.setAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, 
        menuList)); 

जब मैं एक आइटम में स्पर्श करते हैं, यह एक सफेद हो जाता है:

<ListView 
    android:id="@+id/list_menu_nav" 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:choiceMode="singleChoice" 
    android:listSelector="#fff"> 
</ListView> 

एडाप्टर के रूप में सेट किया गया है पृष्ठभूमि (जैसा कि मैंने सेट किया है)। लेकिन, जब मैं निष्पादित करता हूं तो नीचे दिए गए आइटम पर क्लिक करें, यह चुना जाता है लेकिन सफेद पृष्ठभूमि नहीं मिलता है।

navMenu.performItemClick(navMenu.getChildAt(1), 1, navMenu.getAdapter().getItemId(1)); 

मुझे पता है क्योंकि सब कुछ काम करता है की उम्मीद (श्रोता कहा जाता है, getCheckedItemPosition रिटर्न सही मान) के रूप में यह चयन किया जाता है।

इस मामले में सही दृष्टिकोण क्या है? एक कस्टम के लिए लेआउट का चयन करें और खुद को हाइलाइटिंग करें या एक ही डिफ़ॉल्ट लेआउट का उपयोग कर एक तरीका है?

+0

शायद तुम क्लिक करने से पहले करने के लिए 'invalidate' आइटम की जरूरत है:

केवल वैकल्पिक हल आप कर सकते हैं एक स्पर्श घटना के लिए मजबूर है। – Naddy

+0

मैंने इसका परीक्षण किया। यह भी काम नहीं करता है, 'navMenu.invalidate() 'और' navMenu.requestLayout() 'प्रदर्शन के बाद क्लिक करें। : \ –

+0

@EugenMartynov माना जाता है कि 'सूची चयनकर्ता' सूची में क्या चुना जाता है। आप जो कह रहे हैं उसके बाद, शायद एंड्रॉइड टीम को नाम बदलना चाहिए जैसे 'listSelectorForUserClicks'। –

उत्तर

1

तुम बस TextView इस के अनुसार है:

तो इस व्यवहार की उम्मीद है। चयनित स्थिति को अनुकूलित करने के लिए आपको आइटम तत्व के लिए अपना लेआउट बनाना होगा। यहाँ एक नज़र डालें:

+0

आपका उत्तर सही है, लेकिन यह बेहतर हो सकता है, एशले मैंने संपादित किया लेकिन अस्वीकार कर दिया गया क्योंकि बहुत अधिक बदल गया। मैं सहमत नहीं हूं, लेकिन यह stackoverflow प्रोटोकॉल है। –

1

setSelection, setItemChecked, performItemClick, ListView या जो भी आप करने के लिए सोच रहे हैं विस्तार, संभव नहीं है। AbsListView इसे positionSelector नामक एक निजी विधि का उपयोग करता है। इसे केवल अन्य निजी तरीकों के अंदर बुलाया जाता है और यह सुनिश्चित करने के लिए जांच की जाती है कि स्थिति चयनकर्ता से पहले उपयोगकर्ता इंटरैक्शन था।

View temp = navMenu.getChildAt(1); 
navMenu.onTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), 
    SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, temp.getX(), temp.getY(), 0)); 
+0

क्या जादू है। इसमें त्रुटि वापसी त्रुटि है। लेकिन मैं कोशिश पकड़ने के चारों ओर घूमता हूं .. यह अपवाद के साथ मेरे लिए काम किया .. –

संबंधित मुद्दे