我有一个扩展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>
如果您需要任何其他信息和/或代码,请告诉我们!
先谢谢你的帮助,请原谅我的英文......
答案 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硬编码为每个组的子元素数,因为这是您在代码中显示的开关数。
希望这有帮助!