为什么SeekBar应该在'onCreate'方法上?

时间:2019-01-31 02:04:57

标签: android

我为下面的计时器编写了代码,但是,如果我用单独的方法而不是像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) {

        }
    });

}

3 个答案:

答案 0 :(得分:2)

Activity的类会自动将

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