Iterate through ListView and get EditText-Field values

后端 未结 4 1072
借酒劲吻你
借酒劲吻你 2020-12-03 04:37

I\'ve created a ListView (myList) with one EditText-Field in each row (R.id.mannschaften). Under the ListView, I\'ve created a Button and set an OnClickListener for it in th

相关标签:
4条回答
  • 2020-12-03 05:19

    I think the answer from @Arius was quite close to be right solution. I just want to highlight that View you should get is View which contain with ListView. So you need to getChildAt(position) related with your ListView.

    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()));
            }
        }
        ....
    }
    
    0 讨论(0)
  • 2020-12-03 05:19

    Regarding why the selected answer might sometimes throw a null on the "et = (EditText) v.findViewById(i);"

    Would it not be at that point trying to select the item at position i WITHIN the view that you had previously selected? Thus if there are fewer items in the child views than there are items in the whole list, you would get null due to i trying to select items that don't exist.

    Perhaps a nested loop could solve this problem? Or if you already know the index of the element you need, simply give it the index directly.

    0 讨论(0)
  • 2020-12-03 05:21

    When you use myList.getAdapter().getView(i,null,null) you are getting a new instance of the item view, try the ListView.getChildAt(position) method like this:

    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());
        }
    ....
    }
    
    0 讨论(0)
  • 2020-12-03 05:21

    Solved the Problem with the help of a friend:

    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());
        }
    ....
    }
    
    0 讨论(0)
提交回复
热议问题