2012-05-08 62 views
0

我有一個活動,它擴展了ExpandableListActivity,它包含一些父組和一些子條目... 左側的組裏面的條目我把一個圖標。每當我打開一個條目它隨機拿出圖標,它不再顯示它們......我在那裏找不到模式,所以我不太清楚我的錯誤在哪裏(也許我正在以錯誤的方式回收我的對象?! )Android 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> 

如果您需要任何額外的信息和/或代碼,請讓我知道!

預先感謝您的幫助,請原諒我的英語...

回答

2

,因爲tvIcon.setAlpha(0);ListView optimalization ... 你應該(switch敘述之前tvIcon.setAlpha(1);)設置阿爾法在其他情況下,1 ...

編輯:

或代替tvIcon.setAlpha(0);嘗試tvIcon.setImageResource(R.drawable.empty);

+0

我確實將Alpha值設置爲1,但我仍然面臨同樣的問題...有什麼可以幫助的嗎? 編輯:你的編輯實際上修復了它......非常感謝! – user754730

1
tvIcon.setBackgroundResource(R.drawable.video_icon); 

試試這個

+0

這沒有奏效。如果我把它放在每一個單獨的一個上,我是對的嗎? – user754730

+0

[通過排列編程嗎?](http://en.wikipedia.org/wiki/Programming_by_permutation) – Selvin

+0

對不起,我把它放在每一個,並沒有用這個替換setAlpha ... – user754730

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; 
    } 

請注意,我硬編碼爲n每個組的子元素數量,因爲這是您在代碼中顯示的開關數量。

希望這會有所幫助!

+0

非常感謝你爲這個長而有用的答案!儘管如此,我已經能夠解決這個問題了。無論如何,再次感謝! – user754730