Android ViewModel,在计时器内更新 LiveData
创始人
2024-08-19 04:30:07
0

要在计时器内更新LiveData,您可以使用Android的ViewModel和CountDownTimer类。下面是一个示例代码,演示如何在计时器内更新LiveData:

首先,创建一个包含LiveData和CountDownTimer的ViewModel类。ViewModel类用于在配置更改时保持数据的一致性,并在活动被销毁和重新创建时保持数据的状态。

public class TimerViewModel extends ViewModel {
    private MutableLiveData timeLiveData;
    private CountDownTimer countDownTimer;
    
    public LiveData getTimeLiveData() {
        if (timeLiveData == null) {
            timeLiveData = new MutableLiveData<>();
        }
        return timeLiveData;
    }
    
    public void startTimer(long duration) {
        if (countDownTimer != null) {
            countDownTimer.cancel();
        }
        
        countDownTimer = new CountDownTimer(duration, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                timeLiveData.setValue(millisUntilFinished / 1000);
            }
            
            @Override
            public void onFinish() {
                timeLiveData.setValue(0L);
            }
        };
        
        countDownTimer.start();
    }
    
    @Override
    protected void onCleared() {
        super.onCleared();
        if (countDownTimer != null) {
            countDownTimer.cancel();
        }
    }
}

然后,在活动中使用ViewModel来观察LiveData的更改,并在计时器内更新UI:

public class MainActivity extends AppCompatActivity {
    private TimerViewModel timerViewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        timerViewModel = ViewModelProviders.of(this).get(TimerViewModel.class);
        LiveData timeLiveData = timerViewModel.getTimeLiveData();
        timeLiveData.observe(this, new Observer() {
            @Override
            public void onChanged(Long time) {
                // 在这里更新UI,显示剩余时间
                // textView.setText(String.valueOf(time));
            }
        });
        
        // 启动计时器
        long duration = 60000; // 1分钟
        timerViewModel.startTimer(duration);
    }
}

这样,每次计时器的时间发生变化时,LiveData的观察者将收到通知,并更新UI。请注意,您可以根据自己的需求自定义计时器的逻辑和UI更新。

相关内容

热门资讯

透视真的!wepoker手机插... 透视真的!wepoker手机插件,wepoker轻量版透视方法(透视)2025新版教程(有挂插件)1...
透视挂透视!wepoker透视... 透视挂透视!wepoker透视破解版,wepoker游戏下载(透视)教你教程(有挂插件)1、wepo...
透视存在!we-poker辅助... 透视存在!we-poker辅助,we-poker软件(透视)AI教程(有挂攻略)1)we-poker...
透视安装!wepoker怎么发... 透视安装!wepoker怎么发冤家牌,wepoker模拟器哪个好用(透视)AI教程(有挂脚本)透视安...
透视系统!wepoker怎么挂... 透视系统!wepoker怎么挂飞机,wepoker俱乐部辅助(透视)微扑克教程(有挂黑科技)1、下载...
透视能赢!wepoker私人局... 透视能赢!wepoker私人局俱乐部,wepoker免费透视脚本(透视)教你攻略(有挂攻略)1、每一...
透视了解!wepoker透视底... 透视了解!wepoker透视底牌脚本,wepoker有没有辅助(透视)教你教程(有挂细节);1.we...
透视讲解!wejoker透视方... 透视讲解!wejoker透视方法,wepoker透视破解版(透视)wepoke教程(有挂辅助)1)w...
透视美元局!wepoker安装... 透视美元局!wepoker安装教程,wepoker手机版辅助(透视)AI教程(有挂插件);1、全新机...
透视好友!wepoker透视脚... 透视好友!wepoker透视脚本是什么,wepokerplus开挂(透视)科技教程(有挂技巧)1、进...