需要帮助,在活动加载和按钮按下时显示随机选择的图像
我试图做一个简单地加载随机图像时加载的活动。它编译罚款和加载罚款。但根本行不通。任何想法我做错了什么?这让我的眼睛流血。需要帮助,在活动加载和按钮按下时显示随机选择的图像
------------ Here我的RandomImage类------------------------------ --------
package com.package.name;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View.OnClickListener;
public class RandomImage extends Activity implements OnClickListener{
private static final Random rgenerator = new Random();
Integer [] mImageIds = {
R.drawable.pictureone,
R.drawable.picturetwo,
R.drawable.picturethree,
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.randomimage);
Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
ImageView iv = (ImageView) findViewById(R.id.imageviewyeah);
iv.setTag(q);
View nextButton = findViewById(R.id.next_image_button);
nextButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next_image_button:
Intent i = new Intent(this, RandomImage.class);
startActivity(i);
break;
}
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu3, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId()) {
case R.id.menu:
startActivity(new Intent(this, Main.class));
return true;
}
return false;
}
}
------------在这里我的布局-------------------- ------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget0"
android:background="@drawable/nhiebg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center" >
<ImageView
android:id="@+id/imageviewyeah"
android:tag="q"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</ImageView>
<Button
android:id="@+id/next_image_button"
android:text="Next Image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:typeface="serif"/>
</LinearLayout>
感谢您一直是个巨大的帮助,还有我想你说的话。但是,它只是在开始时加载一个随机图像,该按钮没有任何作用。我按下它,然后那张图像就消失了,没有任何东西载入它的位置。一大堆东西通过logcat,但这是前两行
07-17 04:15:33.102:WARN/ResourceType(30476):获取资源编号0x00000002时的包标识符 07-17 04 :15:33.112:WARN/ImageView(30476):无法找到资源:2
----------------------------我现在有什么----------------------------
public class RandomImage extends Activity implements OnClickListener{
private Integer [] mImageIds = {
R.drawable.one,
R.drawable.two,
R.drawable.three,
};
private static final Random rgenerator = new Random();
private ImageView iv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.randomimage);
Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
iv = (ImageView) findViewById(R.id.imageviewyeah);
iv.setImageResource(q);
View nextButton = findViewById(R.id.next_image_button);
nextButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next_image_button:
iv.setImageResource(rgenerator.nextInt(mImageIds.length));
break;
}
}
我也想指出,我试过了删除线
Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];
和线
and iv.setImageResource(q);
和
代替iv.setTag(q)
,请尝试使用iv.setImageResource(q)
它仍然没有奏效。
其他改进:
您当前方法的工作,它显示一个新的随机图像的意义,但同时也结束了不必要创建新RandomImage活动,这可以吃内存和处理能力(每一次按钮被按下)。
这里是一个更有效的方法;声明iv
为您的活动的一个实例变量:
private ImageView iv;
,并在您的onCreate实例是()(只是删除“ImageView的”):
iv = (ImageView) findViewById(R.id.imageviewyeah);
这意味着你只需要在设置一次你的活动。然后,在的onClick(),与
iv.setImageResource(mImageIds[rgenerator.nextInt(mImageIds.length)]);
@brybam是更换
!有一个更简单的方法。我会在上面编辑我的解决方案,因为评论有一个字符限制。祝你好运! :) – 2010-07-17 04:51:02
你的解决方案会吃掉记忆,因为它会创造大量的新活动。但是,您可以将其声明为清单中的“单数”。这样它将贯穿整个活动生命周期,但不会浪费资源与活动的额外实例。这对于你的实例来说是不必要的,但是如果你需要通过创建来完成这个活动,这可以做到这一点。 – Falmarri 2010-07-17 06:02:36
嗯,通常当出现像Java语法无关的奇怪错误时,它表明您的xml文件出现了错误,它会阻止Android自动构建项目(生成R类)。如果您确定您的xml是正确的,请尝试以下操作: - 对xml文件进行一些更改并进行撤销,以强制重建。 - 检查Eclipse中的Problems选项卡。如果错误在那里,请右键单击它,删除它并强制重建。 - 将你的代码复制到一个新的项目,看看它是否在那里工作。 我从来没有亲身体验过这个;对不起,我不能更有帮助。 – 2010-07-17 09:50:42