2015-04-27 116 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); 
    } 
} 

我想在按下一個按鈕後更改一些按鈕的背景圖像。使用視圖正常工作。但是,如果我試圖改變一個專門的ImageButton我得到這個從logcat的:Android Studio設置Imagebutton的背景

產生的原因:顯示java.lang.NullPointerException:試圖調用虛擬方法無效android.widget.ImageButton.setBackgroundResource(INT)「上空對象引用 在com.example.loan.fastclickerv30.Game_Screen.test(Game_Screen.java:43)

這是ImageButton的XML代碼:

<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

請張貼activity_start_menue.xml –

+0

2個問題......你在哪裏叫「測試」?作爲一個ImageButton,你會想要setImageResource,而不是背景資源。 ImageResource爲您提供所有有趣的imageview功能(如scaletype和whatnot),其中backgroundResource恰好適合圖像到背景 – Psest328

+0

您的錯誤完全告訴你什麼是錯的。您試圖對未設置的對象調用函數。這就是爲什麼你會得到一個'NullPointerException'。你在哪裏測試'測試(視圖)'順便說一句? – Bram

回答

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

b1很可能爲空。如果是這種情況,那麼您的按鈕可能不會在您期望的xml中被稱爲imbttn1。確認XML中的id並仔細檢查b1是否有值。

+0

你一定是對的。這樣做 b1 =(ImageButton)v;和 b1.setImageResource(R.drawable.button_testbackground);作品。但我不明白爲什麼b1爲空。我添加了XML代碼。它的ID設置爲imbttn1 –

+0

發佈的XML顯示完全相同的名稱。所以這不是問題。 –

+0

他剛剛發佈了XML代碼。之前沒有發佈,因此我建議檢查XML中的ID。 – 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爲空。您有兩個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的新手。如果您覺得問題的答案能解決問題,請點擊綠色複選標記將其標記爲「已接受」。 –