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;
}
}
Dank! Die erste Option hat funktioniert, hat aber auch einiges vermasselt. Aber die zweite Option macht den Job ohne Probleme! – Luanhu