2015-03-13 90 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