2017-04-07 2 views
0

Ich verwende eine ExpandableListView mit Gruppenelemente und untergeordnete Elemente, die aus Daten generiert werden, die ich erhalte. Jetzt brauche ich eine Schaltfläche am unteren Rand jeder generierten Gruppe mit einem onClickListener, der eine Funktion aufruft, die wissen muss, welcher Gruppe die Schaltfläche zugeordnet ist.Hinzufügen einer Schaltfläche für jede Gruppe in einer ExpandableListView

Hinzufügen es meine list_group.xml Layout-Datei wird die Taste auf dem Beispieldaten Titel -Header und Hinzufügen zu meine list_item.xml hinzufügen wird es auf jedes einzelnen Beispieldaten -TextView Element hinzufügen.

Es ist mein erstes Projekt mit Android Studio und ich blieb stecken, um das Problem zu beheben. Hier

ist ein Screenshot von how the list looks like
Ich versuche, die Schaltfläche hinzufügen, wo Taste Artikel ist.

Dies ist meine Funktion, um die Liste mit Daten zu füllen:

private void prepareListData(ccyPair[] ccyPairs) { 
      listDataHeader = new ArrayList<String>(); 
      listDataChild = new HashMap<String, List<String>>(); 
      int counter = 0; 
      // Adding child data 
      for (ccyPair p : ccyPairs){ 
       listDataHeader.add("Sample Data Title"); 
       List<String> tempExpInfo = new ArrayList<String>(); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("BUTTON"); 
       listDataChild.put(listDataHeader.get(counter), tempExpInfo); 
       counter++; 
      } 
     } 

list_group.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dp" 
    android:background="@color/colorExpandableList"> 


    <TextView 
     android:id="@+id/lblListHeader" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
     android:textSize="17dp" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp" 
     android:background="@color/colorExpandableList" 
     android:textColor="#2282c1" 
     android:layout_alignParentTop="true"/> 

</RelativeLayout> 

list_item.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorExpandableList"><![CDATA[ 
    android:orientation="vertical" > 



    ]]> 

    <TextView 
     android:id="@+id/lblListItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorExpandableList" 
     android:paddingBottom="5dp" 
     android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" 
     android:paddingTop="5dp" 
     android:textSize="17dip" /> 


</LinearLayout> 

Und die ExpandableListAdapter

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    @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); 

     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_group, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

Antwort

1

getChildView() Methode ist, wo man hinschaut will

Erste Option:

Im getChildView() -Methode Sie müssen unterscheiden, welche vie Möchten Sie aufpumpen?

if(isLastChild){ 
    convertView = Inflater.inflate(R.layout.list_item_with_button, null); 
} else { 
    convertView = Inflater.inflate(R.layout.list_item, null); 
} 

Für das letzte Kind erstellen Sie eine list_item_with_button.xml, die eine Schaltfläche Komponente enthält. Sie können dann das boolesche Flag isLastChild überprüfen, um dieses neue Layout aufzublasen, um die Schaltfläche an der letzten Position zu erhalten.

Zweite Option: Sie können die vorhandene list_item.xml bearbeiten und auf eine Schaltfläche, um es hinzuzufügen, die Sie an der letzten Position anzeigen, indem

View button = convertView.findViewById(R.id.myButton); 
if(isLastChild){ 
    v.setVisibility(View.VISIBLE); 
} else { 
    v.setVisibility(View.GONE); 
} 
+0

Dank! Die erste Option hat funktioniert, hat aber auch einiges vermasselt. Aber die zweite Option macht den Job ohne Probleme! – Luanhu

Verwandte Themen