2011-01-29 22 views
17

अपने Android एप्लिकेशन में मैं एक ListView घटक MyList बुलाया बनाया, और मेरे स्वयं के कस्टम प्रकार की वस्तुओं के साथ यह भरा है:चयनित आइटम को ListView से कैसे प्राप्त करें?

ArrayAdapter<MyClass> adapter= 
       new ArrayAdapter<MyClass>(this, R.layout.lay_item, theObjects); 
myList.setAdapter(adapter); 
:

class MyClass{ 

    private String displayName; 
    private String theValue; 
... //here constructor, getters, setters and toString() are implemented 

} 

मैं ArrayAdapter MyList साथ ArrayList theObjects बाध्य करने के लिए इस्तेमाल

यह ठीक काम करता है, सूची पॉप्युलेट और इत्यादि है, लेकिन जब मैं चयनित आइटम तक पहुंचने का प्रयास कर रहा हूं, तो मुझे एक नल ऑब्जेक्ट मिलता है। मैंने

myList.setOnItemClickListener(new OnItemClickListener() { 

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

MyClass selItem = (MyClass) myList.getSelectedItem(); // 
String value= selItem.getTheValue(); //getter method 

} 

का उपयोग करके ऐसा किया है क्या समस्या है? धन्यवाद

उत्तर

-2

MyClass selItem = (MyClass) myList.getSelectedItem(); //

आपने कभी भी अपनी कक्षा को तुरंत चालू नहीं किया।

+3

उन्होंने कहा कि वह कर सकते हैं सामान देखें, इसलिए कक्षा को तत्काल होना चाहिए। – xandy

19

आप हैंडलर चुनने के बजाय क्लिक हैंडलर को कार्यान्वित कर रहे हैं। डिफ़ॉल्ट रूप से एक सूची का चयन करने का अनुमान नहीं है।

आप क्या बदलना चाहिए, अपने ऊपर के उदाहरण में,

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
    MyClass item = (MyClass) adapter.getItem(position); 
} 
34

डिफ़ॉल्ट रूप से, जब आप एक ListView आइटम पर क्लिक करें यह अपने राज्य में परिवर्तन नहीं होता करने के लिए "चयनित" है। तो, जब घटना आग लगती है और आप करते हैं:

myList.getSelectedItem(); 

विधि में वापस आने के लिए कुछ भी नहीं है। आप क्या करना है करके स्थिति का उपयोग और अंतर्निहित वस्तु प्राप्त करने के लिए है:

myList.getItemAtPosition(position); 
+1

यह किसी चयनित आइटम की अनुक्रमणिका ढूंढने में कैसे मदद करता है?आप पहली जगह कैसे स्थिति प्राप्त करेंगे? – Zelphir

+0

@Zelphir स्थिति ITemClick (AdapterView एडाप्टर, देखें वी, int स्थिति, लंबी आईडी) में पारित किया गया है विधि – RustyFluff

+0

ग्रेट उत्तर, स्वीकार्य होना चाहिए – Michael

3
myList.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
     MyClass selItem = (MyClass) adapter.getItem(position); 
    } 
} 
5

पर onItemClick:

String text = parent.getItemAtPosition(position).toString(); 
1

touch mode में, वहाँ कोई ध्यान और कोई चयन है । आपके यूआई को चयन के लिए रेडियो बटन जैसे विभिन्न प्रकार के विजेट का उपयोग करना चाहिए।

इस बारे में ListView पर प्रलेखन भयानक है, setSelection पर केवल एक अस्पष्ट उल्लेख है।

4

चूंकि onItemClickLitener() स्वयं आपको चयनित आइटम का सूचकांक प्रदान करेगा, तो आप बस getItemAtPosition(i).toString() कर सकते हैं। कोड स्निपेट नीचे दी गई है: -

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      String s = listView.getItemAtPosition(i).toString(); 

      Toast.makeText(activity.getApplicationContext(), s, Toast.LENGTH_LONG).show(); 
      adapter.dismiss(); // If you want to close the adapter 
     } 
    }); 

उपरोक्त विधि पर, i पैरामीटर वास्तव में आप चयनित आइटम की स्थिति देता है।

1

setOnItemClickListener का उपयोग करके आप भी लागू करने की आवश्यकता सही जवाब है, लेकिन आप (बिना क्लिक किया जाता है) भी तीर के साथ चयन को बदल सकते हैं अगर आप एक कुंजीपटल है, इसलिए, setOnItemSelectedListener:

myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { 
    MyObject tmp=(MyObject) adapterView.getItemAtPosition(position); 
     } 
      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 
       // your stuff 
      } 
     }); 
संबंधित मुद्दे