2015-03-13 89 views
0

我必须在列表中显示足球运动员列表。没有问题,一切正常,但国籍的小旗正在消失,而我滚动我的名单。Android ExpandableListView项目图像消失

这是它应该是什么样子:list item player OK
这里是结果,我有些滚动之后有:list item player NOK

我也有一个球员和一个又一个的肖像的图片显示衬衫这工作正常。

下面是我的一些代码部分(我只把它的某些部分,以减少大小和收起什么工作,但随时索要更多,如果你需要):

我的项目列表布局(局部布局,你不会得到相同的结果作为形象展示):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="3dp" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" 
    android:paddingTop="3dp" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/portrait" 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:background="@drawable/portrait_default" /> 

    <LinearLayout 
     android:id="@+id/nationalityLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/logoNationality" 
      android:layout_width="13dp" 
      android:layout_height="13dp" 
      android:layout_marginRight="3dp" /> 

     <TextView 
      android:id="@+id/nationality" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="TextView" 
      android:textSize="13dp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/shirt" 
     android:layout_width="40dp" 
     android:layout_height="32dp" 
     android:gravity="center_horizontal" > 

     <TextView 
      android:id="@+id/number" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingTop="5dp" /> 
    </LinearLayout> 
</LinearLayout> 

我有我的项目持有人:

private class ChildViewHolder { 
    public ImageView portrait; 
    public ImageView logoNationality; 
    public TextView nationality; 
    public LinearLayout nationalityLayout; 
    public LinearLayout shirt; 
    public TextView number; 

    public void reset() { 
     portrait.setImageBitmap(null); 
     portrait.setBackgroundResource(R.drawable.portrait_default); 
     nationalityLayout.setVisibility(View.VISIBLE); 
     nationality.setText(""); 
     number.setText(""); 
    } 
} 

而且从我的适配器getChildView(带标志是一张地图,而把在适配器列表和playerShirt一个BitmapDrawable之前加载)项目填写:

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    ChildViewHolder holder; 

    if (convertView == null) { 
     convertView = LayoutInflater.from(context).inflate(R.layout.liste_item, null); 
     holder = new ChildViewHolder(); 
     holder.portrait = (ImageView) convertView.findViewById(R.id.portrait); 
     holder.nationalityLayout = (LinearLayout) convertView.findViewById(R.id.nationalityLayout); 
     holder.logoNationality = (ImageView) convertView.findViewById(R.id.logoNationality); 
     holder.nationality = (TextView) convertView.findViewById(R.id.nationality); 
     holder.shirt= (LinearLayout) convertView.findViewById(R.id.shirt); 
     holder.number = (TextView) convertView.findViewById(R.id.number); 

     convertView.setTag(holder); 
    } else { 
     holder = (ChildViewHolder) convertView.getTag(); 
     holder.reset(); 
    } 

    FootPlayer player = children.get(groupPosition).get(childPosition); 

    // Doing nothing with portrait for now 
    if (player.getNationality() != null) { 
     holder.nationalityLayout.setVisibility(View.VISIBLE); 
     holder.nationality.setText(player.getNationality()); 
     if (player.getNatImg() != null) { 
      holder.logoNationality.setImageDrawable(flags.get(player.getNatImg())); 
     } else { 
      holder.logoNationality.setVisibility(View.INVISIBLE); 
     } 
    } else { 
     holder.nationalityLayout.setVisibility(View.GONE); 
    } 
    holder.shirt.setBackgroundDrawable(playerShirt); 
    holder.number.setText(String.valueOf(player.getNumber())); 

    return convertView; 
} 

眼下,标志出现在列表的开头,证明我说的国旗地图正确充满我的图片,但是当我向下滚动时,他们开始随机消失,最终没有一个人出现了。

如此重要的要点是:

  • 我的标志地图正确充满BitmapDrawable(和正确的键)
  • 我playerShirt也是BitmapDrawable但不会消失,因为国旗做
  • 我已经试图使用setBitmapImage而不是setBitmapDrawable来设置标志图像(也设置背景为我目前正在做的衬衫)
  • 我试着用可绘制的res图像和我有相同的结果
  • 我知道,我通过我的,如果条件的旗号,正确

有关此问题的任何帮助将不胜感激。

回答

1

您并未将logoNationality的可见性设置回VISIBLE,因为您正在使用nationalityLayout。所以我猜想一旦它第一次消失了,它仍然是不可见的,即使你以后重用了设置drawable的视图。

看一看到固定代码:

if (player.getNationality() != null) { 
    holder.nationalityLayout.setVisibility(View.VISIBLE); // <- SET VISIBLE, Well done! 
    holder.nationality.setText(player.getNationality()); 

    holder.logoNationality.setVisibility(View.VISIBLE); // <- Missing line: SET VISIBLE as before. 
    if (player.getNatImg() != null) { 
     holder.logoNationality.setImageDrawable(flags.get(player.getNatImg())); 
    } else { 
     holder.logoNationality.setVisibility(View.INVISIBLE); // <- OK, no logo, so hide it. 
    } 
} else { 
    holder.nationalityLayout.setVisibility(View.GONE); // No nationality, hides entire layout. 
} 
+0

咩。我很盲目。非常感谢! – 2015-03-13 14:01:28