2012-05-08 13 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

私はアルファ値を1に設定しましたが、私はまだ同じ問題に直面しています...何か助けることができますか? 編集:あなたの編集は実際にそれを修正しました...ありがとう! – user754730

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

これを試してください

+0

これは機能しませんでした。もし私がこれを1枚ごとに置くのであれば私は正しいのですか? – user754730

+0

[順列によるプログラミング?](http://en.wikipedia.org/wiki/Programming_by_permutation) – Selvin

+0

ああ、私はそれを他の人の上に置き、setAlphaをこれに置き換えていない... – user754730

1

これはビューリサイクルのために発生します。あなたはそのようにそれを修正することができます:

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

1)と呼ばれている)あなたのアダプタ

private int iconArray[][]; 

2に必要な情報を保持するための配列を宣言し、アダプタとすぐに配列を移入します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をnにハードコードしていますあなたのコードに表示するスイッチの数である各グループの子要素の数。

希望すると便利です。

+0

この長いと有益な答えをありがとう!私はすでに他の答えで問題を解決することができました。とにかくもう一度ありがとう! – user754730

関連する問題