当前位置: 首页 > news >正文

廊坊网站快速排名优化网站图片设置

廊坊网站快速排名优化,网站图片设置,企业网站推广的目的,有没有专门做营销的公司Android中简单封装Livedata工具类 前言#xff1a; 之前讲解过livedata和viewmodel的简单使用#xff0c;也封装过room工具类#xff0c;本文是对livedata的简单封装和使用#xff0c;先是封装了一个简单的工具类#xff0c;然后实现了一个倒计时工具类的封装. 1.LiveD…Android中简单封装Livedata工具类 前言 之前讲解过livedata和viewmodel的简单使用也封装过room工具类本文是对livedata的简单封装和使用先是封装了一个简单的工具类然后实现了一个倒计时工具类的封装. 1.LiveDataHelper工具类 package com.example.livedatautilsdemo.helper;import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer;import java.util.Map; import java.util.WeakHashMap;/*** author: njb* date: 2023/7/31 0:10* desc:*/ public class LiveDataHelperTextends MutableLiveData {private final WeakHashMapObserverT, Boolean mObservers new WeakHashMap();Overridepublic void observe(NonNull LifecycleOwner owner, NonNull Observer observer) {mObservers.put((ObserverT) observer, true);super.observe(owner, observer);}Overridepublic void removeObserver(NonNull Observer observer) {mObservers.remove(observer);super.removeObserver(observer);}Overridepublic void removeObservers(NonNull LifecycleOwner owner) {mObservers.clear();super.removeObservers(owner);}public void setValue(Object value) {for (Map.EntryObserverT, Boolean entry : mObservers.entrySet()) {if (entry.getValue()) {entry.setValue(false);entry.getKey().onChanged((T) value);}}}public void call() {setValue(null);} }2.简单使用 private LiveDataHelperString mLiveDataHelper new LiveDataHelper();Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initTime();}private void initView() {tvName findViewById(R.id.textview);tvTime findViewById(R.id.tvTime);}private void initData() {mLiveDataHelper.observe(this, new ObserverString() {Overridepublic void onChanged(String name) {Log.d(LiveDataDemo, onChanged: name);}});tvName.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {String newName NewName new Random().nextInt(100);mLiveDataHelper.setValue(newName);Log.d(LiveDataDemo, onClick: newName);tvName.setText(String.format(名称发生变化%s, newName));}});}3.布局代码 ?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityTextViewandroid:idid/textviewandroid:layout_width200dpandroid:layout_height60dpandroid:textHello World!android:backgroundcolor/design_default_color_primaryandroid:textSize20spandroid:textColorcolor/whiteandroid:focusabletrueandroid:gravitycenterapp:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent /TextViewandroid:idid/tvTimeandroid:layout_width200dpandroid:layout_height60dpandroid:backgroundcolor/design_default_color_primaryandroid:texttimerandroid:textSize20spandroid:textColorcolor/whiteandroid:focusabletrueandroid:gravitycenterapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toBottomOfid/textviewandroid:layout_marginTop20dp//androidx.constraintlayout.widget.ConstraintLayout4.实现效果如下 5.封装一个倒计时工具类 package com.example.livedatautilsdemo.helper;import android.os.CountDownTimer;import androidx.lifecycle.MutableLiveData;/*** author: njb* date: 2023/8/6 23:37* desc:*/ public class LiveDataTimeHelper extends MutableLiveDataLong {private CountDownTimer countDownTimer;public void startCountDown(long millisInFuture, long countDownInterval) {countDownTimer new CountDownTimer(millisInFuture, countDownInterval) {Overridepublic void onTick(long millisUntilFinished) {setValue(millisUntilFinished / 1000);}Overridepublic void onFinish() {setValue(0L);}};countDownTimer.start();}public void stopCountDown() {if (countDownTimer ! null) {countDownTimer.cancel();}}Overrideprotected void onInactive() {super.onInactive();stopCountDown();} }6.倒计时Viewmodel: package com.example.livedatautilsdemo.viewmodel;import android.os.Handler; import android.os.Looper; import android.util.Log;import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel;import com.example.livedatautilsdemo.helper.LiveDataHelper; import com.example.livedatautilsdemo.helper.LiveDataTimeHelper;import java.util.Timer; import java.util.TimerTask;/*** author: njb* date: 2023/8/2 23:40* desc:*/ public class TimerLiveDataViewModel extends ViewModel {private LiveDataTimeHelper liveDataHelper;public LiveDataTimeHelper getCurrentSecondLiveData() {if (liveDataHelper null) {liveDataHelper new LiveDataTimeHelper();}return liveDataHelper;}public void startTiming(int seconds) {if (liveDataHelper ! null) {liveDataHelper.startCountDown(seconds * 1000, 1000);}}public void stopTiming() {if (liveDataHelper ! null) {liveDataHelper.stopCountDown();}}Overrideprotected void onCleared() {super.onCleared();stopTiming();} }7.简单使用 package com.example.livedatautilsdemo.viewmodel;import android.os.Handler; import android.os.Looper; import android.util.Log;import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel;import com.example.livedatautilsdemo.helper.LiveDataHelper; import com.example.livedatautilsdemo.helper.LiveDataTimeHelper;import java.util.Timer; import java.util.TimerTask;/*** author: njb* date: 2023/8/2 23:40* desc:*/ public class TimerLiveDataViewModel extends ViewModel {private LiveDataTimeHelper liveDataHelper;public LiveDataTimeHelper getCurrentSecondLiveData() {if (liveDataHelper null) {liveDataHelper new LiveDataTimeHelper();}return liveDataHelper;}public void startTiming(int seconds) {if (liveDataHelper ! null) {liveDataHelper.startCountDown(seconds * 1000, 1000);}}public void stopTiming() {if (liveDataHelper ! null) {liveDataHelper.stopCountDown();}}Overrideprotected void onCleared() {super.onCleared();stopTiming();} }8.实现效果如下 9.项目源码如下 https://gitee.com/jackning_admin/live-data-utils-demo
http://www.hkea.cn/news/14540902/

相关文章:

  • 新加坡网站大全wordpress的用户分
  • 网站建设策划书前言注册安全工程师官网入口
  • a站是哪个app商城网站开发 价格
  • 响应式网站建设开发公司婚恋网站建设分析
  • 网站后台加密网站建设实训总结范文
  • 教育加盟网站建设嘉兴网站关键词推广
  • 建个网站需要服务器吗医院信息化建设网站
  • 珠宝网站设计外贸公司怎么接订单
  • 石家庄网站建设德信互联科技有限公司网页开发工具怎么打开
  • 做汤的网站有哪些福州服务类网站建设
  • 常州如何进行网站推广大型的平台类网站建设需要多少资金
  • 网站建设座谈会山西笑傲网站建设
  • 欧美个人网站招聘外包服务公司
  • 114百事通做网站600网络工程师网课
  • 德网站建设深圳形象设计公司
  • 开发施工建设网站审核最新项目网
  • 南宁市网站设计建设行业网站平台的瓶颈
  • 单页面的网站模板免费下载园林景观设计公司人员规模
  • 河北沧州建设官方网站怎么制作游戏?
  • 商城网站营销系统源码上海高端模板建站
  • 瑜伽网站模版wordpress html 单页模板
  • 网站维护 静态页面滨州淘宝网站建设
  • 网站免费优化三星企业网站建设ppt
  • 如何利用网站开发国外客户鸽WordPress主题
  • 关于开展网站建设工作的通知做soho 怎么建立网站
  • 大良招聘网站建设h5网站模板免费下载
  • h5网站建设 北京开设网站的费用
  • 长沙注册公司核名网站网页上传和网站开发
  • 汕头网站推广seo官方网站建设方法
  • 网站建设shundeit网站制作设计教程