vue视频教程 dtcms文档 单例模式 gps resultMap Jenkins uitableview tfs oauth 如何做网络营销推广 architecture angular ui router vue最新版本 郑州网站开发 jquery绑定事件的方法 pip环境变量 java手机验证码 安装python mysql删除表 python数据 python功能 python编程教程 python教程 python文件写入 python调用自定义函数 python正则匹配数字 java中的数据类型 jdbc连接mysql java终止线程 javahttp java函数调用 linux的安装 php案例 sql语句大全实例教程 kms神龙版 beatedit tftpd64 圆形截图 getelementbyid python求和
当前位置: 首页 > 学习教程  > 编程语言

ViewMode+LiveData例子

2020/9/19 14:48:40 文章标签:

ViewMode+LiveData例子

Activity/Fragment只应关注UI,而不应关系操作逻辑,因此操作逻辑应放到Viewmodel中去
下面是我手画的数据流图:
在这里插入图片描述
首先有FragmentViewModelLivedata这三个对象。

  1. Fragment观察Viewmodel的Livedata数据,如果livedata的值改变会通知Frament。
  2. ViewModel获取数据(网络、数据库),然后设置Livedata的值
  3. Livedata的值改变就通知Fragment
  4. Fragment刷新界面

代码如下:
Fragment


import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;

/**
*
* @author hys huyunsong@58.com
* @date 2020/9/19
*/
public class MyActivity extends AppCompatActivity {
   Handler messageHandler;
   MyViewModel myViewModel;
   Handler mainHandler;

   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       final TextView textView = findViewById(R.id.textView);
       // 新建ViewModel
       myViewModel = new MyViewModel();

       // 子线程
       HandlerThread handlerThread = new HandlerThread("");
       handlerThread.start();
       // 子线程Handler
       messageHandler = new Handler(handlerThread.getLooper());
       // 主线程handler
       mainHandler = new Handler(getMainLooper());
       // 开启自自线程改变数据
       messageHandler.post(new Runnable() {
           @Override
           public void run() {
               int i = 0;
               while (i < 100) {
                   mainHandler.post(new Runnable() {
                       @Override
                       public void run() {
                           myViewModel.requestChangeText();
                       }
                   });
                   try {
                       Thread.sleep(500);
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
                   i++;
               }
           }
       });

       myViewModel.getmText().observe(this, new Observer<String>() {
           @Override
           public void onChanged(final String s) {
               runOnUiThread(new Runnable() {
                   @Override
                   public void run() {
                       textView.setText(s);
                   }
               });

           }
       });
   }
}

viewmodel


import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import java.util.Observable;
import java.util.Random;

/**
 * Describe:<p></p>
 * 描述:<p></p>
 *
 * @author hys huyunsong@58.com
 * @date 2020/9/19
 */
public class MyViewModel extends ViewModel implements IMyModelHelper {


    private MutableLiveData<String> mText = new MutableLiveData<String>();

    public MyViewModel() {
    }

    public MutableLiveData<String> getmText() {
        return mText;
    }

    @Override
    public void requestChangeText() {
        changeText();
    }

    private void changeText(){
        getmText().setValue(new Random(10).toString());
    }
}
package com.loyal888.tets;

/**
 * Describe:<p></p>
 * 描述:<p></p>
 *
 * @author hys huyunsong@58.com
 * @date 2020/9/19
 */
public interface IMyModelHelper  {
    void requestChangeText();
}

总结:数据通知可以使用Observaler,实现进一步解耦合


本文链接: http://www.dtmao.cc/news_show_200193.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?