Android Studio设置Imagebutton的背景

时间:2015-04-27 18:56:31

标签: android imagebutton

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工作正常。但是,如果我尝试更改一个图像按钮,我会从logcat中获取它:

  

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void 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" />

3 个答案:

答案 0 :(得分: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 :(得分:2)

您收到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);
    }
}

答案 2 :(得分:1)

Binding

b1可能为空。如果是这种情况,那么您的按钮可能不会像您期望的那样在xml中被称为imbttn1。确认XML中的id并仔细检查b1是否有值。