0

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>

追加情報やコードが必要な場合は、お知らせください。

助けてくれてありがとう、私の英語を許してください...

4

3 に答える 3

2

それはtvIcon.setAlpha(0);ListView最適化のため...他の場合(tvIcon.setAlpha(1);switchステートメントの前)にアルファを1に設定する必要があります...

編集:

または代わりにtvIcon.setAlpha(0);試してくださいtvIcon.setImageResource(R.drawable.empty);

于 2012-05-08T12:19:17.800 に答える
1
tvIcon.setBackgroundResource(R.drawable.video_icon);

これを試してください

于 2012-05-08T12:22:32.223 に答える
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 をハードコードしたことに注意してください。

お役に立てれば!

于 2012-05-08T12:43:52.297 に答える