【问题标题】:Need help displaying randomly chosen image on activity load and button press需要帮助在活动加载和按钮按下时显示随机选择的图像
【发布时间】:2011-03-17 05:31:23
【问题描述】:

我正在尝试创建一个在加载时仅加载随机图像的活动。它编译得很好并且加载得很好。但根本行不通。任何想法我做错了什么?这让我的眼睛流血了。

------------这是我的 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);

还是不行

【问题讨论】:

    标签: java android random imageview


    【解决方案1】:

    请尝试使用iv.setImageResource(q),而不是iv.setTag(q)


    其他改进:

    您当前的方法在显示一个新的随机图像的意义上是有效的,但它最终也会不必要地创建一个新的 RandomImage 活动,这会消耗内存和处理能力(每次按下按钮时)。

    这是一种更有效的方法;将iv 声明为您的活动的实例变量:

    private ImageView iv;
    

    并在您的 onCreate() 中实例化它(只需删除“ImageView”):

    iv = (ImageView) findViewById(R.id.imageviewyeah);
    

    这意味着您只需在活动期间设置一次。然后,在 onClick() 中,替换

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

    iv.setImageResource(mImageIds[rgenerator.nextInt(mImageIds.length)]);
    

    【讨论】:

    • @brybam 是的!有一个更简单的方法。我将在上面编辑我的解决方案,因为 cmets 有字符限制。祝 Java 好运! :)
    • 您的解决方案会消耗内存,因为它会创建大量新活动。但是,您可以在清单中将其声明为“单任务”。这样,它将通过活动生命周期,但不会因活动的额外实例而浪费资源。这对您的实例来说是不必要的,但如果您要求活动通过 oncreate,这将做到这一点。
    • 嗯,通常当出现与 Java 语法无关的奇怪错误时,它表明您的 xml 文件有问题,这会阻止 Android 自动构建项目(生成 R班级)。如果您确定您的 xml 是正确的,请尝试以下操作: - 对 xml 文件进行一些更改并撤消这些更改以强制重建。 - 检查 Eclipse 中的问题选项卡。如果错误在那里,请右键单击它,将其删除,然后强制重建。 - 将您的代码复制到一个新项目,看看它是否在那里工作。我自己从来没有经历过。抱歉,我不能提供更多帮助。
    • 是的,看起来像是构建问题。尝试做一个“干净”并在 Eclipse 中重建你的项目。当 eclipse 不知道它需要重建 R 类时,有时会发生这种情况
    猜你喜欢
    • 2011-03-18
    • 2011-08-23
    • 2020-08-16
    • 2011-08-24
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2013-02-24
    相关资源
    最近更新 更多