我刚注册才能寻求帮助。 我正在做一个显示图片库的应用程序。单击任何图像时,必须打开图像并显示它。
有两项活动:'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)'行从方法的末尾移到了开头。
问题已解决:)
答案 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