Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set an ImageView[] array?

in order to set ImageView dynamic i take an ImageView[] array. If i try to work on a ImageView from my array the activity crashes. Where is my mistake?

activity_main.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);
}

    }

Look at setImages(). A works, B and C crashes my activity. Where is my mistake?

TIA Tobias

like image 936
CoUnt3r Avatar asked Nov 28 '22 21:11

CoUnt3r


2 Answers

Your ImageView[] IMGS = { iv1, iv2, iv3 }; just contains 3 nulls elements at the moment that you are looping

try to add values in your IMGS by doing

IMGS[0] = iv1;
IMGS[1] = iv2;
IMGS[2] = iv3;
like image 172
Festus Tamakloe Avatar answered Dec 05 '22 18:12

Festus Tamakloe


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

You never assign iv1, iv2 and iv3 to the array

like image 33
Blackbelt Avatar answered Dec 05 '22 19:12

Blackbelt