IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android JectPack笔记三-1:ViewModel/LiveData基本使用 -> 正文阅读

[移动开发]Android JectPack笔记三-1:ViewModel/LiveData基本使用

官方地址

https://developer.android.google.cn/topic/libraries/architecture/viewmodel#java

创建viewmodel

import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.ViewModel;

import com.zqq.h5shell.activity.jectpack_navigation.bean.User;

import java.util.ArrayList;
import java.util.List;

public class MyViewModle extends ViewModel {
    private MediatorLiveData<List<User>> users;

    public MediatorLiveData<List<User>> getUser() {
        if(users == null){
            users=new MediatorLiveData<>();
            loadUsers();
        }
        return users;
    }

    private void loadUsers() {
        List<User> list=new ArrayList<>();
        for(int i=0;i<10;i++){
            User user=new User("aoe"+i,"iuu"+i,i);
           list.add(user);
        }
        users.setValue(list);
    }

    public void setUser(MediatorLiveData<List<User>> user) {
        this.users = user;
    }

    public void changeUser() {
        if(users != null){
            List<User> list=new ArrayList<>();
            for(int i=0;i<10;i++){
                User user=new User("bpmf"+i,"geh"+i,100+i);
                list.add(user);
            }
            users.postValue(list);
        }
    }
}

import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseDataBindingHolder;
import com.zqq.h5shell.ARouterContent;
import com.zqq.h5shell.R;
import com.zqq.h5shell.activity.jectpack_navigation.bean.User;
import com.zqq.h5shell.activity.jectpack_navigation.model.MyViewModle;
import com.zqq.h5shell.databinding.ActivityViewmodelBinding;
import com.zqq.h5shell.databinding.ItemDatabindAdapterBinding;

import org.jetbrains.annotations.NotNull;

import java.util.List;

@Route(path = ARouterContent.ViewModelActivity)
public class ViewModelActivity extends AppCompatActivity {

    private ActivityViewmodelBinding binding;
    private MyBinddingAdapter adapter;
    private MyViewModle myViewModle;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_viewmodel);

        binding.recyclerview.setLayoutManager(new LinearLayoutManager(this));
        //adapter 使用databinding
        adapter = new MyBinddingAdapter(R.layout.item_databind_adapter);
        binding.recyclerview.setAdapter(adapter);

        myViewModle = new ViewModelProvider(this).get(MyViewModle.class);
        myViewModle.getUser().observe(this, new Observer<List<User>>() {
            @Override
            public void onChanged(List<User> users) {
                adapter.addData(users);
            }
        });

        binding.btnChange.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myViewModle.changeUser();  //更新
            }
        });
    }

    public class MyBinddingAdapter extends BaseQuickAdapter<User, BaseDataBindingHolder> {

        public MyBinddingAdapter(int layoutResId, @org.jetbrains.annotations.Nullable List<User> data) {
            super(layoutResId, data);
        }

        public MyBinddingAdapter(int layoutResId) {
            this(layoutResId,null);
        }

        @Override
        public int getItemViewType(int position) {
            return super.getItemViewType(position);
        }

        @Override
        protected void convert(@NotNull BaseDataBindingHolder baseDataBindingHolder, User user) {
            if(user == null){
                return;
            }

            ItemDatabindAdapterBinding dataBinding = (ItemDatabindAdapterBinding) baseDataBindingHolder.getDataBinding();
            dataBinding.setUser(user);
            dataBinding.executePendingBindings();
        }
    }
}

adapter 条目布局

<?xml version="1.0" encoding="utf-8"?>
<layout   xmlns:android="http://schemas.android.com/apk/res/android" >
    <data>
        <import type="android.view.View"/>
        <variable
            name="user"
            type="com.zqq.h5shell.activity.jectpack_navigation.bean.User" />

    </data>
<LinearLayout

    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/tv_frist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="@{user.age>20 ? View.GONE:View.VISIBLE}"
        android:text="@{user.fristName}"
        />
    <TextView
        android:layout_marginLeft="@dimen/dp_30"
        android:id="@+id/tv_last"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.lastName}"
        android:onClick="@{user::onLastNameClick}"
        />

    <TextView
        android:layout_marginLeft="@dimen/dp_30"
        android:id="@+id/tv_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{String.valueOf(user.age)}"
        android:onClick="@{()->user.setAge(user.age+10000)}"
        />
</LinearLayout>
</layout>

结果:
请添加图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 10:01:16  更:2021-11-27 10:02:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:58:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码