user1107888 user1107888 - 10 days ago 4
Android Question

Expandable ListView with custom adapter

I am trying to implement a ExpandableListView in Android by implementing a custom adapter but I am not getting any output on the screen.

The main xml layout is:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is an expandable listview"
/>
<ExpandableListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>


</LinearLayout>


The group layout file is:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>

<TextView
android:id="@+id/tvPlayerName"
android:textSize="14px"
android:textStyle="normal"
android:layout_width="150px"
android:layout_height="wrap_content"
/>




The child layout file is:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>

<TextView
android:id="@+id/tvPlayerName"
android:textSize="14px"
android:textStyle="normal"
android:layout_width="150px"
android:layout_height="wrap_content"
/>

</LinearLayout>


AND lastly, the activity class file is:

public class ExpandableListViewTest extends ExpandableListActivity {
String groupElements[] = {"India","Austrailia","England","South Africa"};
String childElements[][] = {
{"Sachin Tendulkar","Raina","Dhoni","Yuvraj"},
{"Ponting","Adam Gilchrist","Michael Clarke"},
{"Andrew Strauss","Kevin Peterson","Nasir Hussain"},
{"Grame Smith","AB de Villiers","Jacques Kallis"}
};

int width;
ExpandableListView expList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Setup our adapter
MyExpandableAdapter mAdapter = new MyExpandableAdapter(this);
setListAdapter(mAdapter);
}
public class MyExpandableAdapter extends BaseExpandableListAdapter
{
private Context myContext;

public MyExpandableAdapter(Context context)
{
this.myContext= context;
}

@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childElements[groupPosition][childPosition];
}

@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}

@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.child, parent,false);
}
TextView tvPlayerName =
(TextView)convertView.findViewById(R.id.tvPlayerName);
tvPlayerName.setText(childElements[groupPosition][childPosition]);

return convertView;

}

@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return childElements[groupPosition].length;
}

@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return null;
}

@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return 0;
}

@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.group,parent,false);
}
TextView tvGroupName = (TextView)convertView.findViewById(R.id.groupName);
//tvGroupName.setText(groupElements[groupPosition]);
tvGroupName.setText("Group Row");

return convertView;

}

@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}


}

}


All seems straighhtforward enough but after running the app, the screen stays blank.Any help/ideal is appreciated.

Answer

Your code looks incomplete. You've just got placeholders in the methods getGroup, getGroupId and getGroupCount. They should reference your groupElements array.

The fact that getGroupCount currently returns zero would be enough for the ExpandableListView to not display anything.