4

为了设置 ImageView 动态我采用 ImageView[] 数组。如果我尝试从我的数组中处理 ImageView,则活动会崩溃。我的错误在哪里?

活动主.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" >

    <ImageView
        android:id="@+id/iv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitStart" />

    <ImageView
        android:id="@+id/iv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitStart" />

    <ImageView
        android:id="@+id/iv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitStart" />
</TableRow>

</RelativeLayout>

MainActivity.java:

    package com.example.test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ImageView;

    public class MainActivity extends Activity {

    private ImageView iv1, iv2, iv3;
    private ImageView[] IMGS = { iv1, iv3, iv3 };

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iv1 = (ImageView) findViewById(R.id.iv1);
    iv2 = (ImageView) findViewById(R.id.iv2);
    iv3 = (ImageView) findViewById(R.id.iv3);

    setImages();
}

private void setImages() {

    // A) this works
    iv1.setImageResource(R.drawable.ic_launcher);
    iv2.setImageResource(R.drawable.ic_launcher);
    iv3.setImageResource(R.drawable.ic_launcher);

    // B) at the beginning i need to set all images in a row
    for (ImageView img : IMGS) {
        img.setImageResource(R.drawable.ic_launcher);
    }

    // C) later on i need to set an particular image
    IMGS[1].setImageResource(R.drawable.ic_launcher);
}

    }

看看 setImages()。A 工作,B 和 C 使我的活动崩溃。我的错误在哪里?

TIA托拜厄斯

4

3 回答 3

12

ImageView[] IMGS = { iv1, iv2, iv3 };在循环时只包含 3 个空元素

尝试通过执行在您的 IMGS 中添加值

IMGS[0] = iv1;
IMGS[1] = iv2;
IMGS[2] = iv3;
于 2013-02-27T13:12:15.433 回答
8
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     iv1 = (ImageView) findViewById(R.id.iv1);
     iv2 = (ImageView) findViewById(R.id.iv2);
     iv3 = (ImageView) findViewById(R.id.iv3);

     IMGS[0] = iv1;
     IMGS[1] = iv2;
     IMGS[2] = iv3;

     setImages();
}

您永远不会将 iv1、iv2 和 iv3 分配给数组

于 2013-02-27T13:11:54.410 回答
5

使用以下代码,这对我有用

ImageView[] IMGS= new ImageView[3];

IMGS[0]=findViewById(R.id.iv1);
IMGS[1]=findViewById(R.id.iv2);
IMGS[2]=findViewById(R.id.iv3);
于 2018-06-12T05:15:08.690 回答