2015-04-27 5 views
0
public class Game_Screen extends ActionBarActivity { 
    ImageButton b1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start_menue); 
     ImageButton b1 = (ImageButton) findViewById((R.id.imbttn1)); 
    } 

    public void test(View v){ 
     v.setBackgroundResource(R.drawable.button_testbackground); 
     b1.setBackgroundResource(R.drawable.button_testbackground); 
    } 
} 

Я хочу изменить фоновое изображение некоторых кнопок после нажатия одной кнопки. Использование View отлично работает. Но если я пытаюсь изменить ImageButton конкретно я получаю это от LogCat:Android-установка фонового изображения изображения

Вызванный: java.lang.NullPointerException: Попытка вызвать виртуальный метод «недействительным android.widget.ImageButton.setBackgroundResource (INT)» на ссылка объект пустой на com.example.loan.fastclickerv30.Game_Screen.test (Game_Screen.java:43)

Это XML-код для ImageButton:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imbttn1" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:layout_above="@+id/imageView" 
    android:layout_toStartOf="@+id/textViewLevel" 
    android:onClick="test" /> 
+0

please post activity_start_menue.xml –

+0

2 вопроса ... где вы называете 'test'? и являясь ImageButton, вам нужно будет установить значениеImageResource, а не фоновый ресурс. ImageResource дает вам все полезные функции просмотра изображений (например, scaletype и whatnot), где backgroundResource просто подходит для изображения на задний план. – Psest328

+0

Ваша ошибка точно говорит вам, что не так. Вы пытались вызвать функцию для объекта, который не задан. Вот почему вы получаете «NullPointerException». И где вы настраиваете 'test (View)' btw? – Bram

ответ

1
ImageButton b1= (ImageButton) findViewById(R.id.imbttn1); 

b1 вероятный null. Если это так, то ваша кнопка не может быть вызвана imbttn1 в xml, как вы ожидаете. Подтвердите идентификатор в XML и дважды проверьте, что значение b1 имеет значение.

+0

Вы должны быть правы. Выполнение этого b1 = (ImageButton) v; и b1.setImageResource (R.drawable.button_testbackground); работает. Но я не понимаю, почему b1 является нулевым. Я добавил XML-код. Его ID установлен как imbttn1 –

+0

Опубликованный XML показывает то же имя. Так что это не проблема. –

+0

Он просто разместил XML-код. Раньше это не было опубликовано, поэтому я предложил проверить идентификатор в XML. – user2120910

3

Вы создавали локальную переменную b1 вместо присвоения ее реальной. Используйте этот код.

public class Game_Screen extends ActionBarActivity { 
    ImageButton b1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start_menue); 
     b1 = (ImageButton) findViewById((R.id.imbttn1)); 
    } 

    public void test(View v){ 
     v.setBackgroundResource(R.drawable.button_testbackground); 
     b1.setBackgroundResource(R.drawable.button_testbackground); 
    } 
} 
1

Вы получаете NullPointerException, потому что b1 имеет значение null. У вас есть две переменные b1, одна внутри onCreate и одна в классе Game_Screen. Вы никогда не назначаете его в классе Game_Screen. Измените свой код следующим образом:

public class Game_Screen extends ActionBarActivity { 
    ImageButton b1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start_menue); 
     b1 = (ImageButton) findViewById((R.id.imbttn1)); 
    } 

    public void test(View v){ 
     v.setBackgroundResource(R.drawable.button_testbackground); 
     b1.setBackgroundResource(R.drawable.button_testbackground); 
    } 
} 
+0

Это правильный ответ. Вы ошибочно создали локальную переменную b1, и вы используете переменную экземпляра в методе «test», которая равна null. –

+0

Это решило проблему, спасибо! –

+0

Добро пожаловать. Я вижу, что вы новичок в StackOverflow. Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. –

Смежные вопросы