2017-11-28 2 views
0

Ich benutze eine erweiterbare ListView, ich habe einen einzigen EditText in Every Child Item. list_item.xml:Erhalte ID von EditText in Expandable ListView

<TextView 
      android:id="@+id/lblListItem" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="20dp" 
      android:text="TextView" 
      android:textColor="#000000" 
      android:textSize="17dp" /> 

     <EditText 
      android:id="@+id/marks" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="Obtained" 
      android:inputType="number" 
      android:maxLines="1" 
      tools:layout_editor_absoluteX="142dp" 
      tools:layout_editor_absoluteY="60dp" /> 

Es gibt eine Taste auf mainActivity ist, wenn die Schaltfläche geklickt wird, Ich möchte durch Benutzereingabe Text von jedem Kinder EditText bekommen, ich versucht:

@Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 

     final String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_item, null); 
     } 

     TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem); 

     edt=(EditText)convertView.findViewById(R.id.marks); 
     String abc=edt.getText().toString(); 


     Toast.makeText(convertView.getContext(),"This: "+ abc,Toast.LENGTH_SHORT).show(); 
     txtListChild.setText(childText); 
     return convertView; 
    } 

Aber, Es funktioniert nur, wenn eine Gruppe erweitert wird, (Toast zeigt mir Text, der in EditText bereitwillig vorhanden war) Nicht, wenn Benutzer den Knopf drückt.

So, Wie rufe ich getChildView-Methode in Button klicken?Ich weiß nicht, welche Argumente zu übergeben, wenn Sie es in OnClick() aufrufen. OR

Vielleicht ein Hack wird arbeiten: Wenn Schaltfläche geklickt wird, wird die erweiterte Gruppe zusammen und erweitert, so dass es das tun, was ich will? Vielleicht

+0

Ich möchte Text aller untergeordneten Elemente erhalten. (Vielleicht in einer Schleife) Aber getView() hat keine Schleife, und es funktioniert gut (sonst funktioniert es nur, wenn eine Gruppe erweitert wird) –

+0

Nun, es muss nur eine Taste, Und wie Sie sagen, es ist nicht ein Guter Ansatz, ich denke, der Grund ist: Einige EditTexts sind möglicherweise null? Könnte sein. Dann kann ich den Benutzer einschränken, Button funktioniert nur, wenn alle Felder ausgefüllt sind. Also, bitte sagen Sie mir, wie Sie Referenzen halten und alle Werte auf One ButtonClick übergeben. –

+0

Reihenfolge des Abrufen des Textes sollte so sein, wie sie angezeigt werden. Ich meine, genauso wie Toast im obigen Code zeigt. –

Antwort

0

Sie müssen ID von jedem EditText manuell festlegen. Dies kann in getChildView() erfolgen. Obwohl es nicht helfen wird, geben Sie ein und erhalten Werte von Kind. Es ist nur für die Einstellung und bekommen ID:

@Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 

    final String childText = (String) getChild(groupPosition, childPosition); 

    if (convertView == null) { 
       LayoutInflater infalInflater = (LayoutInflater) this._context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = infalInflater.inflate(R.layout.list_item, null); 
      } 

    TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem); 

    if(childPosition==0)//Original Id will be get only when First Child is being populated 
{ 
      edt=(EditText)convertView.findViewById(R.id.marks); 
    } 
    edt.setId(childPosition); //here the ID will be same as childPosition i.e. 0,1,2... 
    //Now You can get the ID by getID(id); //id can be 0,1,2... 


    Toast.makeText(convertView.getContext(),"This: "+ abc,Toast.LENGTH_SHORT).show(); 
    txtListChild.setText(childText); 
    return convertView; 
     } 
Verwandte Themen