0

我有一个扩展 ExpandableListActivity 的活动,其中包含一些父组和一些子条目...在组内的条目左侧我放了一个图标。每当我打开一个条目时,它会随机取出图标并且不再显示它们......我在那里找不到模式所以我不太确定我的错误在哪里(也许我以错误的方式回收我的对象?! )

这是我的 BaseExpandableListAdapter:

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

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) myContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.child_row, null);
        }

        TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
        tvName .setText(arrChildelements[groupPosition][childPosition]);
        ImageView tvIcon = (ImageView) convertView.findViewById(R.id.imageViewIcon);

        switch (childPosition) {
            case 0:
                tvIcon.setImageResource(R.drawable.ic_1);
                break;
            case 1:
                tvIcon.setAlpha(0);
                break;
            case 2:
                tvIcon.setImageResource(R.drawable.ic_2);
                break;
            case 3:
                tvIcon.setImageResource(R.drawable.ic_3);
                break;
            case 4:
                tvIcon.setImageResource(R.drawable.ic_4);
                break;
            case 5:
                tvIcon.setImageResource(R.drawable.ic_5);
                break;
            case 6:
                tvIcon.setImageResource(R.drawable.ic_6);
                break;
        }

        return convertView;
    }

这是我的 child_row.xml

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

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:paddingLeft="40dp"
        android:src="@drawable/empty" />

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:autoLink="all"
        android:gravity="center_vertical"
        android:paddingLeft="10dp"
        android:textSize="18sp" >
    </TextView>

</LinearLayout>

如果您需要任何其他信息和/或代码,请告诉我!

提前感谢您的帮助,请原谅我的英语......

4

3 回答 3

2

这是因为tvIcon.setAlpha(0);和优化...在其他情况下(在 switch 语句之前)ListView您应该将 alpha 设置为 1 ...tvIcon.setAlpha(1);

编辑:

或者tvIcon.setAlpha(0);尝试tvIcon.setImageResource(R.drawable.empty);

于 2012-05-08T12:19:17.800 回答
1
tvIcon.setBackgroundResource(R.drawable.video_icon);

试试这个

于 2012-05-08T12:22:32.223 回答
1

这是由于视图回收而发生的。你可以像这样修复它:

1)声明一个数组来保存适配器中的必要信息

private int iconArray[][];

2) 在调用适配器后立即填充数组:

iconArray = new int[arrChildelements.length][6];
int i=0;
int j=0;
for (i; i < arrChildelements.length; i++) {
    for (j; j < arrChildelements[i].length; j++) {
        arrChildelements[i][j] = j;
    }
}

3)使用这个数组来设置图标,如下所示:

    switch (iconArray[groupPosition][childPosition]) {
        case 0:
            tvIcon.setImageResource(R.drawable.ic_1);
            break;
        case 1:
            tvIcon.setAlpha(0);
            break;
        case 2:
            tvIcon.setImageResource(R.drawable.ic_2);
            break;
        case 3:
            tvIcon.setImageResource(R.drawable.ic_3);
            break;
        case 4:
            tvIcon.setImageResource(R.drawable.ic_4);
            break;
        case 5:
            tvIcon.setImageResource(R.drawable.ic_5);
            break;
        case 6:
            tvIcon.setImageResource(R.drawable.ic_6);
            break;
    }

请注意,我将 6 硬编码为每个组的子元素数,因为这是您在代码中显示的开关数。

希望这可以帮助!

于 2012-05-08T12:43:52.297 回答