4

ロード時にランダムな画像をロードするだけのアクティビティを作成しようとしています。正常にコンパイルされ、正常にロードされます。しかし、単に機能しません。私が間違っていることについて何か考えはありますか?それは私の目を出血させています。

------------ここに私の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を通過しますが、ここに最初の2行があります

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);

それでもうまくいきませんでした

4

1 に答える 1

2

の代わりにiv.setTag(q)、を使用してみてくださいiv.setImageResource(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)]);
于 2010-07-17T01:03:02.680 に答える