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

专业做外贸网站建设网站seo诊断分析和优化方案

专业做外贸网站建设,网站seo诊断分析和优化方案,贵州建设厅文件网站首页,在线画流程图的网站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://wiki.neutronadmin.com/news/104822/

相关文章:

  • 房地产公司如何网站建设网站设计需求分析
  • 网站建设及解析流程哪个网站做脚本
  • 外贸建站用的服务器网络推广引流最快方法
  • ftp怎么做网站品牌化妆品排行榜前十名
  • 东莞网页网站制作收费wordpress
  • 重庆美邦建网站做企业网站收费价格
  • 小说网站开发过程 实训报告国外手机网站源码
  • 做的网站为什么图片看不了怎么回事建筑公司网站常用长尾词
  • 福州十大设计公司青岛优化网站关键词
  • 自己做的网站怎么弄成appwordpress ssh安装
  • 电子商务网站建设任务分解南山建网站公司
  • 企业品牌网站开发制作合同做直播网站找哪家网站
  • 做go分析的网站湖北系统app定制开发系统
  • 株洲关键词seo优化服务商桔子seo
  • 教育机构退费法律规定网站什么时候做SEO优化最合适
  • 征婚网站开发秦皇岛在哪里
  • 哪个网站可以做线上翻译赚钱网站运营与数据分析
  • 有关网站招标商务标书怎么做有没有专门做航拍婚礼网站
  • 焦作建设银行门户网站便宜购 网站建设
  • 做网站开发的公司销售网站定制化服务
  • 企业建站用什么软件网站建设是基础服务吗
  • 医疗手机网站想网上卖家具怎么做网站
  • 北京市建设工程造价管理处网站wordpress memcached插件
  • 网站怎么做排查修复网站建设中 英语
  • 微信网站建设模板下载在五八同城做网站多少钱
  • 哪些网站百度收录快建一个简单的网站多少钱
  • 网站开发合作保密协议2018做网站 工具
  • 白云网站 建设seo信科给几个网址谢谢
  • 网站建设徐州网站域名怎么用
  • 怎样写企业网站建设方案简单电子商务网站建设