Android Extend BaseExpandableListAdapter
- by Robert Mills
I am trying to extend the BaseExpandableListAdapter, however when once I view the list and I select one of the elements to expand, the order of the list gets reversed. For example, if I have a list with 4 elements and select the 1st element, the order (from top to bottom) is now 4, 3, 2, 1 with the 4th element (now at the top) expanded. If I unexpand the 4th element the order reverts to 1, 2, 3, 4 with no expanded elements.
Here is my implementation:`public class SensorExpandableAdapter extends BaseExpandableListAdapter {
private static final int FILTER_POSITION = 0;
private static final int FUNCTION_POSITION = 1;
private static final int NUMBER_OF_CHILDREN = 2;
ArrayList mParentGroups;
private Context mContext;
private LayoutInflater mInflater;
public SensorExpandableAdapter(ArrayList<SensorType> parentGroup, Context context) {
mParentGroups = parentGroup;
mContext = context;
mInflater = LayoutInflater.from(mContext);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
if(childPosition == FILTER_POSITION) return "filter";
else return "function";
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if(convertView == null)
{
//do something
convertView = (RelativeLayout)mInflater.inflate(R.layout.sensor_row_list_item, parent, false);
if(childPosition == FILTER_POSITION) {
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setText("Add Filter");
} else {
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setText("Add Function");
((CheckBox)convertView.findViewById(R.id.chkTextAddFilter)).setEnabled(false);
}
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return NUMBER_OF_CHILDREN;
}
@Override
public Object getGroup(int groupPosition) {
return mParentGroups.get(groupPosition);
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return mParentGroups.size();
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);
TextView tv = ((TextView)convertView.findViewById(android.R.id.text1));
tv.setText(mParentGroups.get(groupPosition).toString());
}
return convertView;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
`
I just need to take a simple ArrayList of my own SensorType class. The children are the same for all classes, just two.
Also, how do I go about making the parent in each group LongClickable? I have tried in my ExpandableListActivity with this getExpandableListView().setOnLongClickableListener() ... and on the parent TextView set its OnLongClickableListener but neither works.
Any help on either of these is greatly appreciated!