在函数中启用Android应用程序按钮

时间:2012-09-17 13:43:23

标签: java android button

我正在创建一个Android应用程序,在启动过程中我禁用了媒体播放器的pauze按钮。单击确定按钮后(音乐开始播放),我想启用pauze按钮。

此代码工作正常,除了最后一行(我确实删除了一些不相关的行)。这给了我一个运行时错误(NullPointerException)。

我使用MainActivity.this来访问按钮。我做错了什么?

感谢您的帮助!

public class MainActivity extends Activity {

    // initialise variables
    TextView textOut;
    MediaPlayer mediaPlayer;
    Button buttonPauze;
    Button ok;

    // *******************************************************
    // set Layout - on create
    // *******************************************************
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textOut = (TextView) findViewById(R.id.textView1);


        // *******************************************************
        // set the play, generate and pauze buttons
        // *******************************************************
        Button buttonPauze = (Button) findViewById(R.id.buttonPauze);
        Button ok = (Button) findViewById(R.id.buttonStart);

        buttonPauze.setOnClickListener(buttonPauseOnClickListener);
    buttonPauze.setEnabled(false);
    ok.setEnabled(true);

    // *******************************************************
    // on click generate
    // *******************************************************
    ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            MainActivity.this.buttonPauze.setEnabled(true);

5 个答案:

答案 0 :(得分:2)

替换:

Button buttonPauze = (Button) findViewById(R.id.buttonPauze);

使用:

buttonPauze = (Button) findViewById(R.id.buttonPauze);

基本上,你有2 buttonPauze个,一个作为局部变量,另一个作为类字段。通过删除Button,您在本地使用类字段buttonPauze并为其分配适当的对象。


ok相同!

答案 1 :(得分:2)

NPE是因为您在onCreate()中为本地变量分配按钮引用,然后尝试访问未初始化的全局变量。替换这个:

Button buttonPauze = (Button) findViewById(R.id.buttonPauze);

用这个

buttonPauze = (Button) findViewById(R.id.buttonPauze);

为了避免这样的错误,您可以调整常规做法和前缀类全局变量,例如

Button mButton;

不要使用MainActivity.this.语法。当您访问同一类的变量时,这是毫无意义的。刚

buttonPauze.setEnabled(true);

足够(BTW:它是“暂停”)。

答案 2 :(得分:0)

在第

Button buttonPauze = (Button) findViewById(R.id.buttonPauze);

您正在定义和分配局部变量,而不是实例变量。因此,当您在行

中引用实例变量时
MainActivity.this.buttonPauze.setEnabled(true);

buttonPauze尚未设置且仍为null。要修复,只需更改为

buttonPauze = (Button) findViewById(R.id.buttonPauze);

答案 3 :(得分:0)

因为您正在创建具有相同全局变量名称的局部变量,所以它给出了问题。

//不创建局部变量

  buttonPauze = (Button) findViewById(R.id.buttonPauze);
  ok = (Button) findViewById(R.id.buttonStart);

答案 4 :(得分:0)

不要两次定义buttonPause ..