欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

JetPack笔记1-基本用法

程序员文章站 2022-08-14 10:06:01
目录一、现状二、具体实战一、现状传统写法(未使用JetPack)功能越大,下面缺点越大Activity和Fragment是大管家Activity要处理逻辑Activity要处理Model数据Activity 要实时刷新ui,例如更新TextviewActivity 横竖排切换会丢失数据JetPackAndroidx==JetPackActivity 就是管控者-单一原则JetPack更新比Android 更快 ----> 自己独立出来,所以更....

目录

一、现状

二、具体实战


 

一、现状

传统写法(未使用JetPack)

  • 功能越大,下面缺点越大
  • Activity和Fragment是大管家
  • Activity要处理逻辑
  • Activity要处理Model数据
  • Activity 要实时刷新ui,例如更新Textview
  • Activity 横竖排切换会丢失数据

JetPack

  • Androidx==JetPack
  • Activity 就是管控者-单一原则
  • JetPack更新比Android 更快 ----> 自己独立出来,所以更新很快

开始改造,采用jetpack,性能提升40-50%。分工明确,层次清晰
分层

  • 第一层 管控层Activity
  • 第二层 UI数据Model层
  • 第三层 UI View布局层
  • 关联:管控层管理起来

eg:网易云

能力关键差别:懂原理,会手写

 

二、具体实战

android {
    defaultConfig {
        dataBinding {
            enabled true
        }
    }
}

把Activity的数据Model给抽取出来
LiveData 对数据的感应(数据发送改变,观察者设计模式,让我的观察者 改变==UI改变)
MutableLiveData 

AndroidViewModel 如果要用context环境,用它

public class LoginViewModel extends AndroidViewModel {
    
    //LiveData 对数据的感应(数据发送改变,观察者设计模式,让我的观察者 改变==UI改变)
    private MutableLiveData<String> phoneInfo;

    private Context context;

    //如果不需要 环境Context,就直接继承ViewModel
    //如果需要 环境Context,就继承AndroidViewModel
    
    public LoginJetViewModel(@NonNull Application application) {
        super(application);
        this.context = application.getApplicationContext();
    }

    //暴露出去数据
    public MutableLiveData<String> getPhoneInfo() {
        if (phoneInfo == null) {//提高性能
            phoneInfo = new MutableLiveData<>();
            phoneInfo.setValue("");//初始化数据
        }
        return phoneInfo;
    }

    public void login() {
        ToastUtils.showShortToast(context, "点击了登录按钮");
        phoneInfo.setValue("点击了登录按钮");
    }

 activity_login.xml

小提示:Alt+Enter 自动加入databinding

<?xml version="1.0" encoding="utf-8"?>
<!-- 凡是让databinding 来管理的 都需要加入 layout-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <!-- 数据管理区域-->
    <data>
        <variable
            name="data"
            type="com.cdz.cdm.login.LoginViewModel" /> <!-- 指定哪一个viewmodel-->
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cl_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@mipmap/iv_login_bg"
        tools:ignore="MissingConstraints">

        <TextView
            android:id="@+id/tv_login_title_prompt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp_10"
            android:padding="12dp"
            android:src="@mipmap/iv_back_white"
            android:text="@{data.phoneInfo}"
            android:textColor="@color/white"
            android:textSize="22sp"
            app:layout_constraintLeft_toLeftOf="parent"
          />

        <TextView
            android:id="@+id/tv_login"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_margin="20dp"
            android:layout_marginTop="@dimen/dp_40"
            android:background="@drawable/login_tv_flese"
            android:gravity="center"
            android:onClick="@{()->data.login()}"
            android:text="登录"
            android:textColor="@color/white"
            android:textSize="18sp"
            app:layout_constraintTop_toBottomOf="@id/tv_login_title_prompt" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

 DataBinding类是根据xml布局文件的名字生成的,activity_main.xml->ActivityMainBinding

/**
 * 登录界面
 */
public class LoginActivity extends AppCompatActivity {
    //DataBinding类是根据xml布局文件的名字生成的,activity_login.xml->ActivityLoginBinding
    private ActivityMainBinding binding;
    private LoginViewModel viewModel;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(this, R.layout.aaaaa);
        viewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(LoginJetViewModel.class);
        binding.setData(viewModel);
        binding.setLifecycleOwner(this);
    }
}

 

本文地址:https://blog.csdn.net/u010194271/article/details/107467124

相关标签: Android