2013-01-12 31 views
22

मैंने प्रत्येक पंक्ति (R.id.mannschaften) में एक EditText-Field के साथ एक ListView (myList) बनाया है। ListView के तहत, मैंने एक बटन बनाया है और ऑनक्रेट() - विधि में इसके लिए ऑनक्लिक लिस्टनर सेट किया है। अब जब बटन क्लिक किया गया है, तो मैं ListView के माध्यम से पुन: प्रयास करना चाहता हूं और प्रत्येक पंक्ति में EditText-Field का मान प्राप्त करना चाहता हूं और उन्हें स्ट्रिंग-सूची में सहेजना चाहता हूं। लेकिन मैं यह कैसे करूँ?ListView के माध्यम से Iterate और EditText-Field मान प्राप्त करें

यहाँ मेरी कोड है:

private void ButtonClick() { 
    /** get all values of the EditText-Fields */ 
    View v; 
    ArrayList<String> mannschaftsnamen = new ArrayList<String>(); 
    EditText et; 

    for (int i = 0; i < myList.getCount(); i++) { 
     v = myList.getChildAt(i); 
     et = (EditText) v.findViewById(R.id.mannschaften); 
     mannschaftsnamen.add(et.getText().toString()); 
    } 
    ..... 
} 

मैं पहले से ही पता है, कि getChildAt ही दिखाई पंक्तियों के लिए है, लेकिन मैं कैसे अलग ढंग से यह करने के लिए पता नहीं है।

उत्तर

16

एक दोस्त की मदद से समस्या हल:

private void ButtonClick() { 
    /** get all values of the EditText-Fields */ 
    View v; 
    ArrayList<String> mannschaftsnamen = new ArrayList<String>(); 
    EditText et; 
    for (int i = 0; i < myList.getCount(); i++) { 
     v = myList.getChildAt(i); 
     et = (EditText) v.findViewById(R.id.editText1); 
     mannschaftsnamen.add(et.getText().toString()); 
    } 
.... 
} 
+1

मैं इस कोड को आजमा रहा हूं लेकिन एट या प्रासंगिक फ़ील्ड हमेशा मेरे लिए शून्य देता है। तुम जानते हो क्यों? – tejas

+1

यह लाइन एट = (एडिटटेक्स्ट) v.findViewById (i); मुझे शून्य फेंकता है, क्या आप अनुमान लगा सकते हैं क्यों? – tejas

+1

क्या आप जानते हैं क्यों et = (EditText) v.findViewById (i); शून्य फेंकता है? – lolliloop

30

जब आप का उपयोग myList.getAdapter().getView(i,null,null) आप आइटम दृश्य का एक नया उदाहरण मिल रहा है, ListView.getChildAt(position) विधि इस तरह की कोशिश क्यों चुना गया उत्तर कभी-कभी "et = (editText) v.findViewById (i) पर एक नल फेंक सकता है;"

क्या उस बिंदु पर आइटम को चुनने का प्रयास नहीं किया जा रहा है, जिसे मैंने पहले देखा था? इस प्रकार यदि पूरी सूची में आइटम की तुलना में बच्चे के विचारों में कम आइटम हैं, तो मैं उन वस्तुओं का चयन करने की कोशिश कर रहा हूं जो मौजूद नहीं हैं।

शायद एक नेस्टेड पाश इस समस्या को हल कर सकता है? या यदि आपको पहले से आवश्यक तत्व की अनुक्रमणिका पता है, तो बस इसे सीधे इंडेक्स दें।

+0

लेकिन एडाप्टर आकार सूचीदृश्य आकार से अलग हो सकता है। – Diffy

+1

'myList.getCount()' या 'myList.getChildCount()'? उत्तरार्द्ध अधिक सुसंगत दिखता है – espinchi

0

:

private void ButtonClick() { 
    /** get all values of the EditText-Fields */ 
    View v; 
    ArrayList<String> mannschaftsnamen = new ArrayList<String>(); 
    EditText et; 
    for (int i = 0; i < myList.getCount(); i++) { 
     v = myList.getAdapter().getView(i, null, null); 
     et = (EditText) v.findViewById(i); 
     mannschaftsnamen.add(et.getText().toString()); 
    } 
.... 
} 
4

मुझे लगता है कि @ एरियस का जवाब सही समाधान के करीब था। मैं बस View को हाइलाइट करना चाहता हूं आपको View मिलना चाहिए जिसमें ListView है। तो आपको अपने ListView से संबंधित getChildAt(position) की आवश्यकता है।

private void ButtonClick() { 
/** get all values of the EditText-Fields 
find your ListView local variable you had created for example : 
private ListView listview; 
You also need to catch null value of EditText first. */ 
ArrayList<String> mannschaftsnamen = new ArrayList<String>(); 
EditText et; 
    for (int i = 0; i < listview.getCount(); i++) { 
     et = (EditText) listview.getChildAt(i).findViewById(R.id.editText1); 
     if (et!=null) { 
      mannschaftsnamen.add(String.valueOf(et.getText())); 

      /** you can try to log your values EditText */ 
      log.v("ypgs", String.valueOf(et.getText())); 
     } 
    } 
    .... 
}