需要帮助,在活动加载和按钮按下时显示随机选择的图像

问题描述:

我试图做一个简单地加载随机图像时加载的活动。它编译罚款和加载罚款。但根本行不通。任何想法我做错了什么?这让我的眼睛流血。需要帮助,在活动加载和按钮按下时显示随机选择的图像

------------ 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)]); 
+0

@brybam是更换

Intent i = new Intent(this, RandomImage.class); startActivity(i); break; 

!有一个更简单的方法。我会在上面编辑我的解决方案,因为评论有一个字符限制。祝你好运! :) – 2010-07-17 04:51:02

+0

你的解决方案会吃掉记忆,因为它会创造大量的新活动。但是,您可以将其声明为清单中的“单数”。这样它将贯穿整个活动生命周期,但不会浪费资源与活动的额外实例。这对于你的实例来说是不必要的,但是如果你需要通过创建来完成这个活动,这可以做到这一点。 – Falmarri 2010-07-17 06:02:36

+0

嗯,通常当出现像Java语法无关的奇怪错误时,它表明您的xml文件出现了错误,它会阻止Android自动构建项目(生成R类)。如果您确定您的xml是正确的,请尝试以下操作: - 对xml文件进行一些更改并进行撤销,以强制重建。 - 检查Eclipse中的Problems选项卡。如果错误在那里,请右键单击它,删除它并强制重建。 - 将你的代码复制到一个新的项目,看看它是否在那里工作。 我从来没有亲身体验过这个;对不起,我不能更有帮助。 – 2010-07-17 09:50:42