Android 可扩展列表 : groups with different layouts

标签 android expandablelistview

我想为每个组显示不同的子布局,例如:

@Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {

            if (convertView == null) {

                switch (groupPosition){

                case 0:
                    LayoutInflater inflater =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.child_row, null);
                    TextView tvPlayerName = (TextView) convertView.findViewById(R.id.tvPlayerName);
                    tvPlayerName.setText(arrChildelements[groupPosition][childPosition]);
                    break;

                case 1:
                    LayoutInflater inflater1 =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater1.inflate(R.layout.child_row1, null);
                    TextView tvPlayerName1 = (TextView) convertView.findViewById(R.id.tvPlayerName);
                    tvPlayerName1.setText(arrChildelements[groupPosition][childPosition]);
                    break; 

                case 2:
                    LayoutInflater inflater2 =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater2.inflate(R.layout.child_row2, null);
                    TextView tvPlayerName2 = (TextView) convertView.findViewById(R.id.tvPlayerName);
                    tvPlayerName2.setText(arrChildelements[groupPosition][childPosition]);
                    break;

                case 3:             
                    LayoutInflater inflater3 =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater3.inflate(R.layout.child_row3, null);
                    TextView tvPlayerName3 = (TextView) convertView.findViewById(R.id.tvPlayerName);
                    tvPlayerName3.setText(arrChildelements[groupPosition][childPosition]);
                    break;

                }


            } return convertView;
    }

我的问题是在点击组时,子列表在组之间变化。

谁能告诉我我做错了什么?

最佳答案

这是因为

if (convertView == null)

删除它,它应该可以正常工作,如果它在删除此 if 语句后按预期工作,返回它并在 if (convertView == null) 中添加 if 语句以使其显示为您想要的,因为删除 if ( convertView == null) 将使滚动速度变慢并使用更多内存。

例如,您可以将所有 View 放在一个 xml 文件或一个 View 中,然后在 switch 方法中使用 setVisibility 来显示适合当前列表项的布局部分。

关于Android 可扩展列表 : groups with different layouts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314793/

相关文章:

android - 如何在Android上的rdf sesame中添加本体文件?

android - 有没有办法使用 espresso 来测试 View 的大小(高度和宽度)以进行 android Instrumentation 测试?

java - 如何在我的 Android 应用程序中添加对 Android 4.4 的支持

android - ExpandableListView 设置 subview 的最大尺寸

android - 我的 trigger.io 应用程序的 'launchimage' 在 Galaxy Nexus 上太小

java - 从已运行的粘性服务将数据发送到 Activity

android - ExpandableListView 可以嵌入到另一个布局中吗?

android - 我需要在我的 ExpandableListView 中延迟我的组的扩展

android - ExpandableListActivity 中 ContextMenu 的问题

user-interface - 如何在黑莓中创建可扩展的 ListView