2017-10-18 69 views
0

我尝试了两种不同的方式在按钮水龙头上执行某些代码,其中一种可以正常工作,另一种则会使用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。

回答

0

更改方法playOnClick从保护到公共修复崩溃。

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); 
     } 
    } 
} 
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); 
}