2009-10-05 21 views
19

पर काम नहीं कर रहा है मैंने प्रत्येक पंक्ति के लिए LinearLayout बढ़ाकर एक कस्टम ListView लागू किया है। प्रत्येक पंक्ति में एक छोटा थंबनेल, एक पाठ और check box होता है। list view ठीक से तैनात किया गया है और मैं बिना किसी समस्या के स्क्रॉल और फ़्लिंग कर सकता हूं।setOnItemClickListener() कस्टम ListView @ एंड्रॉइड

लेकिन ListView बिल्कुल setOnItemClickListener() पर प्रतिक्रिया के लिए प्रतीत नहीं होता है, तो मैं हर पंक्ति जो स्पष्ट रूप से समस्या पैदा कर रही है अंदर पाठ की getView() में क्लिक श्रोता की स्थापना करके एक समाधान की तलाश करनी है जब मैं पुन: उपयोग करने कोशिश कर रहा हूँ adapter। क्या किसी के पास एक समाधान है?

उत्तर

43

प्रयास करें ListView के लिए यह
,

final ListView list = (ListView) findViewById(R.id.list); 
list.setItemsCanFocus(false); 

इसके अलावा, जहाँ आप चेकबॉक्स के आइटम विचारों द्वारा सेट किए गए चेकबॉक्स के लिए अंदर सूची आइटम सेट फ़ोकस करने योग्य झूठी

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

मैं एक ही समस्या आ रही है, ऊपर समाधान पंक्ति पर क्लिक करता है का पता लगाने के लिए काम करता है, लेकिन मैं अपने कस्टम ListView पंक्ति में 2 बटन होते हैं। मैं कैसे बता सकता हूं कि कौन सा बटन क्लिक किया गया था? धन्यवाद – longhairedsi

+0

धन्यवाद !!! तुमने वास्तव में मेरी मदद की !!! –

+1

@longhairedsi: कृपया getView() विधि बटन 1.सेट फोकसबल (झूठी) में निम्न कोड जोड़ें; बटन 2.सेट फोकसबल (झूठा); बटन 1.setFocusableInTouchMode (झूठा); बटन 2.setFocusableInTouchMode (झूठा); बटन 1.setOnClickListener (यह); बटन 2.setOnClickListener (यह); अपने एडाप्टर में बटन के लिए अपने क्लिक श्रोता को लागू करें (या जहां आप चाहें ....) सूची दृश्य के लिए क्लिक श्रोता भी सेट करें ..... अब जांचें कि आपका क्लिक दोनों ..... listview के लिए भी काम करेगा बटन के लिए भी –

0

क्या आपने अपनी विस्तारित एडाप्टर कक्षा में कोई व्यूहोल्डर बनाया था? यदि हां, तो setOnItemClickListener() में उस प्लेसहोल्डर का उदाहरण बनाएं, ऐसा कुछ इस तरह काम करेगा।

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) {   
     View rowView = v; 
     if (rowView == null) { 
      LayoutInflater inflater = this.getLayoutInflater(); 
       // GET INFLATE OF YOUR LAYOUT. 
      rowView = inflater.inflate(R.layout.projectpeopledescrate, null); 
      // CUSTOM ViewHolder Class Created in Adapter. 
// name,title,comment are my components on the same listview clicked item. 
      PPDViewHolder viewHolder = new PPDViewHolder(); 
      viewHolder.name  = (TextView) rowView.findViewById(R.id.ppeopledescrvname); 
      viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime); 
      viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment); 
      viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel); 
      rowView.setTag(viewHolder); 
     } 
      // ANOTHER object instance to apply new changes. 
     PPDViewHolder holder = (PPDViewHolder) rowView.getTag(); 
// I've setted up visibility over the components. You can set your onClickListener over your buttons. 
     holder.comment.setVisibility(View.GONE); 
     holder.name.setVisibility(View.GONE); 
     holder.title.setVisibility(View.GONE); 
     holder.hiddenLayout.setVisibility(View.VISIBLE); 
     holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT)); 
     holder.hiddenLayout.bringToFront(); 

    } 

आशा है, आप कुछ वही चाहते हैं। शुभ लाभ!

11

वर्ष जवाब: मैं previous post here में लिखा

android:focusable="false" 
android:clickable="false" 

मदद नहीं करेगा जब ImageButton कस्टम दृश्य में है .. एक (जावा स्रोत कोड से) रनटाइम के दौरान button.setFocusable(false); का उपयोग करना चाहिए

संपादित करें: और भी सुरुचिपूर्ण समाधान है। सूची तत्व के रूट लेआउट में android:descendantFocusability="blocksDescendants" जोड़ने का प्रयास करें। यही कारण है कि क्लिक्स संभव onListItem कर देगा और अलग से यू बटन संभाल कर सकते हैं या ImageButton

0

मैं इस कोड

this.mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       Log.v(TAG,"loul"); 
      } 
     }); 

है क्लिक करता है लेकिन यह

काम नहीं किया तो मैं जस्ट के तहत एक onItemSelectedListener डाल दिया है और यह काम ऊ:

this.mListView.setItemsCanFocus(false); 
this.mListView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
     Log.v(TAG,"loul"); 
    } 
}); 
//listener for nothing but it allow OnItemClickListener to work 
this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 

    } 
}); 
0

इन गुणों को सेट करें:

android:focusable="false" 
android:focusableInTouchMode="false" 

आपके list_item.xml फ़ाइल में आपके सभी UI तत्वों के लिए।

अगर यह आपके एडाप्टर सेट में हल नहीं होती है:

v.imageView.setFocusable(false); 
    v.imageView.setFocusableInTouchMode(false); 
संबंधित मुद्दे