2015-04-27 68 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的新手。如果您觉得问题的答案能解决问题,请点击绿色复选标记将其标记为“已接受”。 –