Android ExpandableListActivity图标随机消失

时间:2012-05-08 12:08:41

标签: android expandablelistview android-imageview

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

这是我的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>

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

先谢谢你的帮助,请原谅我的英文......

3 个答案:

答案 0 :(得分:2)

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

编辑:

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

答案 1 :(得分:1)

tvIcon.setBackgroundResource(R.drawable.video_icon);

尝试这个

答案 2 :(得分: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硬编码为每个组的子元素数,因为这是您在代码中显示的开关数。

希望这有帮助!