我为下面的计时器编写了代码,但是,如果我用单独的方法而不是像onCreate()这样的预先创建的方法编写了代码,则它无法按我预期的那样工作。但是,如果我将方法的主体部分放在“ onCreate()”中,它就可以正常工作。
在“ onCreate()”方法中编写方法还是独立编写方法之间是否存在某些规则或差异?
public void seekBarController(View view){
SeekBar timerSeekBar = (SeekBar) findViewById(R.id.timerSeekBar);
final TextView timerTextView = (TextView) findViewById(R.id.timerTextView);
timerSeekBar.setMax(10*60);
timerSeekBar.setProgress(30);
timerSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int minutes = (int) progress / 60;
int seconds = (int) progress % 60;
String minutessString = seconds < 10? "0"+ Integer.toString(minutes): Integer.toString(seconds);
String secondsString = seconds < 10? "0"+ Integer.toString(seconds): Integer.toString(seconds);
Log.i("this is progress", Integer.toString(progress));
timerTextView.setText(minutessString+":"+secondsString);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
答案 0 :(得分:2)
onCreate()称为“幕后”。首次创建活动时会自动调用它。请参阅Activity Lifecycles上的Android文档。
在不了解您的Activity的大部分实现的情况下,我想说的是将计时器的代码放在onCreate方法中,或者让onCreate方法调用该方法。
答案 1 :(得分:2)
Activity类提供了一组核心的六个回调:onCreate(),onStart(),onResume(),onPause(),onStop()和onDestroy()。系统首次创建活动时,会触发 onCreate()。
答案 2 :(得分:2)
搜索栏,就像任何视图一样,都需要一个活动,并且属于该活动/由该活动拥有。将在创建活动时创建它。因此,findViewByID
方法只能在实际创建活动时以及在设置了内容(布局)(通过setContentView)之后使用。
尚不清楚您将哪种视图传递给该方法,但是,以下内容通过适当地调用它来使您的方法保持独立(什么都没有传递给该方法,它使用实例的Activity作为findViewById):-
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBarController();
}
public void seekBarController(){
SeekBar timerSeekBar = (SeekBar) this.findViewById(R.id.timerSeekBar);
final TextView timerTextView = (TextView) findViewById(R.id.timerTextView);
timerSeekBar.setMax(10*60);
timerSeekBar.setProgress(30);
timerSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int minutes = (int) progress / 60;
int seconds = (int) progress % 60;
String minutessString = seconds < 10? "0"+ Integer.toString(minutes): Integer.toString(seconds);
String secondsString = seconds < 10? "0"+ Integer.toString(seconds): Integer.toString(seconds);
Log.i("this is progress", Integer.toString(progress));
timerTextView.setText(minutessString+":"+secondsString);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}