[英]Picking a random ImageButton from an ArrayList raises NullPointerException
我正在嘗試通過ImageButton1.setImageResource(R.drawable.someImage);
來更改ImageButton的圖像ImageButton1.setImageResource(R.drawable.someImage);
單擊ImageButton時。
然后,我希望程序更改從包含要使用的ImageButton的ArrayList中隨機選擇的其他ImageButton的ImageResource。 然后,我想通過以下方式將隨機選擇的ImageButton的imageResource設置為someOtherPicture:
ImageButton currentImage;
Random randomNumber = new Random();
int randomNum = randomNumber.nextInt(someArrayList.size());
currentImage = someArrayList.get(randomNum);
currentImage.setImageResource(R.drawable.someOtherImage);
我正在Android Studio中進行編輯,並在Motorola Moto G設備上運行,當我單擊按鈕時,應用程序突然停止。 Log Cat聲稱這是randomPlaceImage randomlyPlaceImage()
方法上的NullPointerException。
這是整個代碼:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import java.util.ArrayList;
import java.util.Random;
public class MainActivity extends Activity {
ImageButton ImageButton1;
ArrayList<ImageButton> someArrayList = new ArrayList<ImageButton>();
Random randomNumber = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addItemsToList();
ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
ImageButton1.setOnClickListener(ImageButton1Listener);
}
addItemsToList (){
someArrayList.add(ImageButton1);
someArrayList.add(ImageButton2);
someArrayList.add(ImageButton3);
someArrayList.add(ImageButton4);
someArrayList.add(ImageButton5);
someArrayList.add(ImageButton6);
someArrayList.add(ImageButton7);
someArrayList.add(ImageButton8);
someArrayList.add(ImageButton9);
}
public void changeImageResource() {
ImageButton currentImage;
int randomNum = randomNumber.nextInt(someArrayList.size());
currentImage = someArrayList.get(randomNum);
currentImage.setImageResource(R.drawable.someOtherImage);
}
View.OnClickListener ImageButton1Listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageButton1.setImageResource(R.drawable.someImage);
someArrayList.remove(ImageButton1);
changeImageResource();
}
};
}
注意:當然,對所有ImageButton都重復了OnCLick方法
您似乎在初始化之前將項目添加到列表中:
addItemsToList();
ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
ImageButton1.setOnClickListener(ImageButton1Listener);
這意味着someArrayList
將保存一堆空引用。
這就是為什么currentImage = someArrayList.get(randomNum);
返回null和currentImage.setImageResource(R.drawable.someOtherImage);
導致NullPointerException。
您應該將初始化順序更改為:
ImageButton1 = (ImageButton) findViewById(R.id.imageButton1);
ImageButton1.setOnClickListener(ImageButton1Listener);
ImageButton2 = (ImageButton) findViewById(R.id.imageButton2);
ImageButton2.setOnClickListener(ImageButton2Listener);
....
addItemsToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.