Нужна помощь в отображении случайно выбранного изображения при загрузке активности и нажатии кнопки - PullRequest
4 голосов
/ 17 июля 2010

Я пытаюсь просто выполнить действие, которое просто загружает случайное изображение при загрузке.Прекрасно компилируется и нормально загружается.Но просто не работает.Есть идеи, что я делаю не так?Это заставляет мои глаза кровоточить.

------------ Здесь мой класс 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-1704: 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);

, но она все еще не работала

1 Ответ

2 голосов
/ 17 июля 2010

Вместо 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)]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...