Android:更改ImageView源会使我的应用程序意外关闭

时间:2013-09-04 13:51:41

标签: java android image imageview gallery

我刚注册才能寻求帮助。 我正在做一个显示图片库的应用程序。单击任何图像时,必须打开图像并显示它。

有两项活动:'Galeria'和'Imagen'。 'Galeria'显示图库,'Imagen'显示点击的图像。 单击图像时,我使用Intent创建第二个活动,如下面的代码所示。

Galeria.java代码:

package com.ejemplo.galeria;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;

public class Galeria extends Activity {

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

    //Called when an image is clicked (I use ImageButtons)
    public void openImage(View view){
        Intent i = new Intent(this,Imagen.class);
        i.putExtra("IMAGEN", view.getId());
        startActivity(i);
    }
}

当按下任何一个ImageButton时,调用'openImage()'方法(按下你按下的任何按钮,调用相同的方法)。这是'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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Galeria" >

<HorizontalScrollView
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:id = "@+id/scrollview">
    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <ImageButton
            android:id="@+id/imagen1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/imagen1"></ImageButton>
        <ImageButton
            android:id="@+id/imagen2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/imagen2"></ImageButton>
        <ImageButton
            android:id="@+id/imagen3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/imagen3"></ImageButton>
        <ImageButton
            android:id="@+id/imagen4"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/imagen4"></ImageButton>
        <ImageButton
            android:id="@+id/imagen5"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/imagen5"></ImageButton>
        <ImageButton
            android:id="@+id/imagen6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/petergriffin"></ImageButton>
         <ImageButton
            android:id="@+id/imagen7"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="fitXY"
            android:onClick="openImage"
            android:src="@drawable/gato"></ImageButton>
    </LinearLayout>
</HorizontalScrollView>

</RelativeLayout>

所以,这是'Image'类的代码:

package com.ejemplo.galeria;

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

public class Imagen extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Intent i = getIntent();
        int id = i.getIntExtra("IMAGEN", -1);
        if(id != -1){
            ImageView iv = (ImageView) findViewById(R.id.imageV1);
            iv.setImageResource(id); //Error
            setContentView(R.layout.imagen);
        }
    }
}

这是'imagen.xml'文件的XML代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView
        android:id="@+id/imageV1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" ></ImageView>

</LinearLayout>

因此,当我修改ImageView的源代码时,我的应用程序意外关闭,我不明白为什么。我一直在寻求帮助,但我一无所获,所以我希望有人能帮助我,我生气了。

谢谢!

----------------------------------------------- -------------------------------------------

----------------------------------------------- -------------------------------------------

好的,我发现了问题

我更改了R.drawable.imagen1方法'setImageResource(id)'中的参数,并构造了switch case语句。

但它一直意外关闭!!!

所以,在'Imagen'类的'onCreate()'方法中,我只是将'setContentView(R.layout.imagen)'行从方法的末尾移到了开头。

问题已解决:)

3 个答案:

答案 0 :(得分:1)

所以这里:

Intent i = new Intent(this,Imagen.class);
i.putExtra("IMAGEN", view.getId());
startActivity(i);

你只是把意见id放在意图中,但在:

之后
int id = i.getIntExtra("IMAGEN", -1);
if(id != -1){
      ImageView iv = (ImageView) findViewById(R.id.imageV1);
      iv.setImageResource(id); //Error
      setContentView(R.layout.imagen);
}

您尝试将此R.id分配给图片资源,这是错误的,因为setImageResource期待R.drawable.my_image之类的内容。请关注javadoc

答案 1 :(得分:0)

 public void openImage(View view){
    Intent i = new Intent(this,Imagen.class);
    i.putExtra("IMAGEN", view.getId());
    startActivity(i);
}

上面的view.getId()将返回特定图像按钮的id。这与drawable资源无关。所以当你在另一个活动中设置setImage()时,当你试图将一个按钮设置为图像视图时,它确实会出错。

相反,您可以构造一个switch case语句,将相应的drawable id发送给另一个activity。

答案 2 :(得分:0)

正如其他人所说 - 你试图将View id设置为ImageResource - 这两个是不同的东西;所以为了解决你的问题,我会建议这样的事情

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.imagen); // before findViewById
    Intent i = getIntent();
    int id = i.getIntExtra("IMAGEN", -1);
    if(id != -1){
        ImageView iv = (ImageView) findViewById(R.id.imageV1);
        switch (id) {
         case R.id.imagen1: // first one
           iv.setImageResource(R.drawable.imagen1);
         break;
         // repeat for others
        } // switch close

    } // if 
} // onCreate

无论如何,在我看来,你会受益于使用ListView / GridView和一些ArrayAdapter