具有自定义适配器的可扩展ListView

时间:2012-05-14 14:05:10

标签: android

我正在尝试通过实现自定义适配器在Android中实现ExpandableListView,但我没有在屏幕上获得任何输出。

主要的xml布局是:

<?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>

组布局文件是:

<?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"
    />

子布局文件是:

<?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>

最后,活动类文件是:

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;
}


}

}

所有看起来都很顺利,但在运行应用程序后,屏幕保持空白。感谢任何帮助/理想。

2 个答案:

答案 0 :(得分:2)

您的代码看起来不完整。您已经在方法getGroupgetGroupIdgetGroupCount中获得了占位符。他们应该引用您的groupElements数组。

getGroupCount当前返回零的事实足以让ExpandableListView无法显示任何内容。

答案 1 :(得分:0)

您可能应该将getGroupCount()的返回值设置为groupElements.length

当前返回的 0 表示您没有任何群组,因此无需显示任何内容。

相关问题