Android: ImageView 使用动态布局的一些问题

Android: some problems using dynamic layout with ImageView

我正在开发一个 Android 游戏,我的 Bestiary 需要一个动态布局,它显示一个 '???' image (R.drawable.ignoto) 如果某个怪物还没有被发现,否则是一个带有它的名字的图像。代码如下:

package fogames.tamagomonsters;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;


public class BestiaryMenuActivity extends Activity {

    int[] monstersId = new int[]{R.drawable.ignoto, R.drawable.m001, R.drawable.m002, R.drawable.m003};
    int backgroundId;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);


        FrameLayout fl = new FrameLayout(this);
        ImageView background = new ImageView(this);
        background.setBackgroundResource(backgroundId);
        fl.addView(background);

        ScrollView sv = new ScrollView(this);
        fl.addView(sv);

        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        sv.addView(ll);

        ImageView m001 = new ImageView(this);
        ImageView m002 = new ImageView(this);
        ImageView m003 = new ImageView(this);


        if (Settings.mgot[0])
            m001.setBackgroundResource(monstersId[1]);
        else
           m001.setBackgroundResource(monstersId[0]);

        if (Settings.mgot[1])
            m002.setBackgroundResource(monstersId[2]);
        else
            m002.setBackgroundResource(monstersId[0]);

        if (Settings.mgot[2])
            m003.setBackgroundResource(monstersId[3]);
        else
            m003.setBackgroundResource(monstersId[0]);


        ll.addView(m001);
        ll.addView(m002);
        ll.addView(m003);


        this.setContentView(fl);
    }
}

这段代码有两个问题:

  1. 当我访问 Bestiary 菜单时,只出现最后一个 ImageView。

  2. 有什么方法可以使用数组来处理这些 ImageView,以避免在包含 100 多个怪物时出现混乱?

在您的情况下,使用 ListView 和 Adapter 是最佳解决方案。

看过this很清楚的例子