У меня возникли проблемы с логикой хранения ImageView в ArrayList.
Разрабатываемое мной приложение отслеживает статусы игроков в игре. Пользователь сначала добавляет объекты Player (который отслеживает строку состояния и изображение состояния, которое идет с ней) в ArrayList (чтобы отслеживать их все). Затем, после отправки всех игроков, появляется экран, раздувающий TableRow для каждого игрока, содержащий кнопку (для просмотра профиля игрока), ImageView (значок, представляющий состояние) и TextView (содержащий строку состояния игрока). значение).
У меня нет проблем с кнопками и загрузкой профиля каждого игрока. Проблема возникает при загрузке графического интерфейса «select status» из dialog_select_icon.xml, в частности, ImageView ArrayList. Я получаю исключение NullPointerException, которое не имеет смысла для меня, потому что я делаю это по существу так же, как я делал кнопки.
//this code runs when user clicks a player's status icon
public void playerStatusIconClicked(View v)
{
//loop through buttons to determine which player's button was clicked
for (int i = 0; i < playerList.size(); i++)
{
if (v.getId() == playerStatusIVList.get(i).getId())
{
calledPlayer = i; //instance variable
loadStatusIconGUI();
}//if
}//for
}//method playerStatusIconClicked
//showStatusIconGUI inflates the "select status icon" GUI
//and handles the user selecting an icon
private void loadStatusIconGUI()
{
//inflate the GUI for the showStatusIcon dialog (inflater is an instance variable)
View view = inflater.inflate(R.layout.dialog_select_icon, null);
//if the list has something in it, start from fresh
if (!selectStatusIVList.isEmpty())
{
selectStatusIVList.clear();
}
//list of icons in the "select status icon" dialog
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV0));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV1));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV2));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV3));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV4));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV5));
selectStatusIVList.add((ImageView) statusIconGUI.findViewById(R.id.statusIV6));
//create a dialog so user can select an icon
AlertDialog.Builder selectIconDialog = new AlertDialog.Builder(this);
selectIconDialog.setView(view); //set the Dialog's custom view
selectIconDialog.setTitle(R.string.title_select_icon);
selectIconDialog.setNegativeButton(R.string.close, null);
selectIconDialog.show();
}//showStatusIconGUI
//Handle clicks in the "select status icon" dialog
//Assigns a new status to the player
public void statusIconClicked(View v)
{
Toast message;
for (int i = 0; i < selectStatusIVList.size(); i++)
{
if (v.getId() == selectStatusIVList.get(i).getId())
{
message = Toast.makeText(
MafiaTracker.this, "new status: " statusID[i], Toast.LENGTH_SHORT);
message.show();
playerList.get(calledPlayer).setImage(imageID[i]);
playerList.get(calledPlayer).setStatus(statusID[i]);
}
}
updateViewPlayerGUI();
}
Обратите внимание, что imageID [i] и statusID [i] относятся к массивам int, содержащим идентификаторы для каждой строки состояния и изображения состояния.
Я могу опубликовать xml-файл, но так как его длина составляет 124 строки, я бы предпочел этого не делать. Просто знайте, что каждый ImageView в xml-файле имеет идентификатор, поэтому я не могу понять, почему я получаю эти NullPointerExceptions, начиная с части "if (! SelectStatusIVList.isEmpty ())" и продолжая с каждым другой звонок после.
Пожалуйста, помогите!