2012-11-15 10 views
12

पर आइटम का मूल्य प्राप्त करें I सूची सूची पर कस्टम एडाप्टर के भीतर किसी चयनित आइटम का मूल्य प्राप्त करने का प्रयास करें। मैं निम्नलिखित कोड के साथ इस प्रयास करें:OnItemClick Listview

public void onItemClick(AdapterView<?> parent, View v, 
         int position, long id) { 

        View curr = parent.getChildAt((int) id); 
        TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem); 
        String playerChanged = c.getText().toString(); 

        Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 

       } 

शुरुआत में, अगर मैं क्लिक करें, मान अच्छे हैं, लेकिन एक बार मैं स्क्रॉल किया और मैं एक और आइटम पर क्लिक करें, मुझे लगता है कि क्लिक किए गए आइटम के गलत मूल्य मिलता है ... यह किस कारण हो रहा है कोई विचार?

उत्तर

45

पैरामीटर v वर्तमान पंक्ति है। इसलिए का उपयोग करें:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 
    String playerChanged = c.getText().toString(); 

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 
} 

(या आप getChildAt(position) इस्तेमाल कर सकते हैं लेकिन यह धीमी होगी।)

समझे आप अपने लेआउट के आधार पर इस अधिक आसान बनाने के लिए सक्षम हो सकता है।

+0

धन्यवाद, यह काम करता है! क्या आपको कोई विचार है कि getChildAt स्थिति क्यों काम नहीं करती है? मैंने यह भी कोशिश की, लेकिन इससे मुझे त्रुटियां भी मिलीं .. –

+1

आपके एडाप्टर 'आईडी' के आधार पर एक पूरी तरह से अलग इंडेक्स का उल्लेख हो सकता है। उदाहरण के लिए CursorAdapters तालिका की प्राथमिक कुंजी को 'id' में वापस कर देता है। दूसरी तरफ 'स्थिति' हमेशा पंक्ति गणना को संदर्भित करना चाहिए। – Sam

+0

@ सैम धन्यवाद, यह मेरे लिए बहुत अच्छा काम करता है! –

0

बस छोटा सा परिवर्तन

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 

आवश्यक है आप कस्टम के बाद से उपयोग कर रहे हैं देखने आप अपने OnItemClickListener में देखें तर्क पारित करने के लिए की जरूरत है तो आप उस मान का उपयोग करने TextViews का विवरण है कि

में मौजूद प्राप्त करने की आवश्यकता
+1

अगली बार कोई टिप्पणी करें, एक अतिरिक्त उत्तर पोस्ट न करें। – sparticvs

0
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class); 
       i.putExtra("hello",adapter.getItem(position).getUsername()); 
       startActivity(i); 
      } 
     }); 

यहां उपयोगकर्ता नाम एक वर्ग में घोषित एक स्ट्रिंग फ़ील्ड है और जब आप क्लिक करते हैं तो फुलाए गए पंक्ति के विवरण प्राप्त करने के लिए आपको getItem() विधि एडाप्टर क्लास में सवारी करना होगा।