0

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

有两个活动:“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>

所以,这是“图像”类的代码:

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)”这一行从方法的末尾移到了开头。

问题解决了 :)

4

3 回答 3

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

于 2013-09-04T14:07:09.190 回答
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 一起使用

于 2013-09-04T14:27:23.390 回答
0
 public void openImage(View view){
    Intent i = new Intent(this,Imagen.class);
    i.putExtra("IMAGEN", view.getId());
    startActivity(i);
}

上面的 view.getId() 将返回特定图像按钮的 id。这与可绘制资源无关。因此,当您在其他活动中 setImage() 时,当您尝试将按钮设置为图像视图时,它确实会出现错误。

相反,您可以构造一个 switch case 语句以将相应的可绘制 id 发送到其他活动。

于 2013-09-04T14:18:03.433 回答