Android Studio 进度条方向未保存

问题描述 投票:0回答:1

我目前有一个进度条可以跟踪音乐文件的进度,但是在不同的方向上它似乎不想更新并且只是停留在之前的位置?

 private ProgressBar musicProgress;
    private int updateIncrement;
    private int duration;
    private int progress;
    private int progressUpdate;

    Timer timer = new Timer();
    TimerTask timerTask;


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

        if (savedInstanceState != null)
        {
            progressUpdate = savedInstanceState.getInt("PROGRESS");
            duration = savedInstanceState.getInt("Duration");
            updateIncrement = savedInstanceState.getInt("Update");

            musicProgress = findViewById(R.id.p_musicProgress);
            musicProgress.setMax(duration);

            timer.scheduleAtFixedRate(timerTask = new TimerTask(){
                @Override
                public void run() {
                    musicProgress.setProgress(progressUpdate);
                }
            }, 0, updateIncrement);
        }

    }

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putInt("PROGRESS", progressUpdate);
        outState.putInt("Update", updateIncrement);
        outState.putInt("Duration", duration);

    }


    public void onPlayClick (View v)
    {
        Log.d("MP3 Player", "Music Play button pressed");
        if(player.getState() == MP3Player.MP3PlayerState.PAUSED)
        {
            player.play();
        }
        else if(player.getState() == MP3Player.MP3PlayerState.PLAYING)
        {
            player.pause();
        }
        else
        {
            player.load(musicURL, playbackspeed);

            updateIncrement = player.getDuration()/100;
            duration = player.getDuration();
            musicProgress = findViewById(R.id.p_musicProgress);
            musicProgress.setMax(duration);

            timer.scheduleAtFixedRate(timerTask = new TimerTask(){
                @Override
                public void run() {
                    progress = player.getProgress();
                    progressUpdate = progress;
                    musicProgress.setProgress(progressUpdate);
                }
            }, 0, updateIncrement);
        }
    }

问题可能是我在计时器内设置了progress=player.getProgress(),所以即使在活动被销毁并再次创建之后,它也会尝试在内部传递旧值并继续,但随后该值会在活动之前发生变化。设置进度?

此时我真的很困惑

编辑1:

我也知道player.getProgress()的冗余分配我希望使用不同的变量将允许它改变但无法让它工作

android android-progressbar android-orientation android-savedstate
1个回答
0
投票

您的

progress
仅在
onPlayClick()
中启动的计时器中更新,并且这只更新视图中的变量,这些变量在重新创建视图时会丢失。作为快速修复,您可以检查状态是否正在播放并在
onCreate
方法中启动新的计时器。但是,首选方法是将状态与视图解耦,并使用 ViewModel 在整个视图的生命周期中保留和保留数据。

© www.soinside.com 2019 - 2024. All rights reserved.