2016-12-18 3 views
0

Ich habe 2 buttons in meinem expandablelistiview Kind, erste Taste View.VISIBLE, und eine andere View.GONE. Ich habe versucht, die erste Schaltfläche zu ändern, die Sichtbarkeit der zweiten Schaltfläche wird sichtbar, aber es funktioniert nicht.Schaltfläche zum Ausblenden von Element in erweiterbarListview Kind

Mein getchildview Methode:

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

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

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

    buttonOff = (Button) convertView.findViewById(R.id.button_off); 

    buttonOff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      buttonOff.setVisibility(View.GONE); 
      buttonTest.setVisibility(View.VISIBLE); 
     } 
    }); 

    buttonTest = (Button) convertView.findViewById(R.id.button_test); 
    buttonTest.setVisibility(View.GONE); 

    buttonTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      buttonTest.setVisibility(View.GONE); 
      buttonOff.setVisibility(View.VISIBLE); 
     } 
    }); 

    TextView listChildText = (TextView) convertView.findViewById(R.id.list_item); 

    listChildText.setText(childText); 

    return convertView; 
} 

Antwort

0

Ihr Code funktioniert nicht, weil Sie den Zustand der Tasten nicht mehr pflegen. Initialisieren Sie den Schaltflächenstatus für alle Ihre Zeilen. Überprüfen Sie dann jedes Mal, wenn Ihre getView() -Methode aufgerufen wird, zuerst den Status, und abhängig davon können Sie festlegen, welche Schaltfläche sichtbar gemacht werden soll. Wenn Sie auf eine Schaltfläche klicken, müssen Sie den Status dieser Zeile aktualisieren. Der folgende Code kann Sie in diese Richtung führen:

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

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

    // get visibility status of the first button 
    final boolean buttonOffVisible = getFirstButtonVisibility(groupPosition, childPosition); 

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

    buttonOff = (Button) convertView.findViewById(R.id.button_off); 

    buttonOff.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // set the state of the first button 
      setFirstButtonVisibility(groupPosition, childPosition, false); // false denoting as GONE 

      buttonOff.setVisibility(View.GONE); 
      buttonTest.setVisibility(View.VISIBLE); 
     } 
    }); 

    buttonTest = (Button) convertView.findViewById(R.id.button_test); 
    // buttonTest.setVisibility(View.GONE); <-- remove this line 

    buttonTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // set the state of the first button 
      setFirstButtonVisibility(groupPosition, childPosition, true); // true denoting as VISIBLE 

      buttonTest.setVisibility(View.GONE); 
      buttonOff.setVisibility(View.VISIBLE); 
     } 
    }); 

    // depending upon the visibility status of first button, make one of the two visible 
    if(buttonOffVisible) { 
     buttonOff.setVisibility(View.VISIBLE); 
     buttonTest.setVisibility(View.GONE); 
    } 
    else { 
     buttonOff.setVisibility(View.GONE); 
     buttonTest.setVisibility(View.VISIBLE); 
    } 

    TextView listChildText = (TextView) convertView.findViewById(R.id.list_item); 

    listChildText.setText(childText); 

    return convertView; 
} 
+0

Vielen Dank für Ihre Antwort, aber als Neuling, was ist getFirstButtonVisibility()? – LastR

+0

getFirstButtonVisibility() und setFirstButtonVisibility() sind Methoden, die Sie implementieren müssen. Erstellen Sie zuerst eine Klasse-Level-Variable, sagen wir hashmap, die Ihre Zeile dem Button-Status zuordnen würde. Dann hole und setze Werte über die Methoden oder greife direkt auf die hashmap zu. Versuchen Sie, sich selbst zu implementieren, es wird Ihnen helfen zu lernen – Aaqib

Verwandte Themen