应用程序在按钮点击时崩溃

时间:2017-10-18 17:10:19

标签: android

我尝试了两种不同的方式在按钮上执行一些代码,一种是有效的,另一种是在我的手机上安装Android 4.1的应用程序崩溃。

如果我在onCreate方法中添加点击监听器然后它可以工作,但如果我用不同的方法做,那么应用程序崩溃(我确实为按钮的onClick事件添加了方法名称)。

有效

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = (Button) findViewById(R.id.button1);
    if (button != null) {
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
                if (progressBar != null) {
                    progressBar.setVisibility(View.VISIBLE);
                }
            }
        });
    }
}

点按钮上的崩溃应用

protected void playOnClick (View v) {
        Button button = (Button) v;
        if (button != null) {
            ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
            if (progressBar != null) {
                progressBar.setVisibility(View.VISIBLE);
            }
        }
    }

知道为什么吗?立即开始学习Android开发。

修改

更改方法playOnClick从受保护的到公共固定的崩溃。

2 个答案:

答案 0 :(得分:0)

考虑到你的“activity_main”布局中存在你的按钮和进度条,在onCreate()中绑定视图的安全方式应该是这样的:

private Button button;
private ProgressBar progressBar;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button1);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            progressBar.setVisibility(View.VISIBLE);
        }
    });
}

使用您的方法时,应用不会崩溃:

protected void playOnClick (View v) {
    progressBar.setVisibility(View.VISIBLE);
}

答案 1 :(得分:0)

更改方法playOnClick从protected到public修复了崩溃。

public void playOnClick (View v) {
    Button button = (Button) v;
    if (button != null) {
        ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
        if (progressBar != null) {
            progressBar.setVisibility(View.VISIBLE);
        }
    }
}