JetPack笔记1-基本用法

目录

一、现状

二、具体实战


 

一、现状

传统写法(未使用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);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值