Android Studio 4.0 New Class小坑以及ViewModelProviders弃用

初建项目的改变

Android Studio 4.0 New Class小坑以及ViewModelProviders弃用_第1张图片
AndroidStudio4.0版本之前如果需要使用 jetpack 类,在初建项目之时需要勾选上图中的 Use androidx.*artifacts
更新为4.0版本之后:
Android Studio 4.0 New Class小坑以及ViewModelProviders弃用_第2张图片
原先的勾选按钮消失,将进行默认Androidx

New class的改变

4.0版本之前:创建class将给出如下的一个弹窗,通过这种方式,可以直接将类的名称、种类、父类、要实现的接口、包名、作用域等状态清晰的展示出来,仅需要傻瓜式的配置即可,而且会有代码提示。
Android Studio 4.0 New Class小坑以及ViewModelProviders弃用_第3张图片

更新到4.0之后,类中 没有了选父类的选项 ,类的创建方式改变成了根据文件模板的方式创建
Android Studio 4.0 New Class小坑以及ViewModelProviders弃用_第4张图片
1、要查看模板、查找自定义内容和修改模板,可以按以下步骤操作

① 对于 Windows 或 Linux,依次选择 File > Settings > Editor > File and Code Templates > Files。
②对于 macOS,依次选择 Android Studio > Preferences > Editor > File and Code Templates > Files。

2、Android官方提供了一部分文件模板,具体可以查看studio里的file template或者直接访问:
https://developer.android.com/studio/write/create-java-class#templates

3、Creat New Class 对话框中的内容填写

Android Studio 会将文件模板变量替换为生成的Java文件中的值。您需要在 Create New Class 对话框中输入这些值。模板包含以下可供您使用的变量:
① IMPORT_BLOCK - 以换行符分隔的列表,其中包含支持任何父类或接口所需的 Java import 语句,或为空字符串 ("")。例如,如果您仅实现 Runnable 接口而不扩展任何内容,则此变量将为 “import
android.app.Activity;\nimportjava.lang.Runnable;\n”。
②VISIBILITY - 相应类是否具有公开访问权限。其值可以为 PUBLIC 或 PACKAGE_PRIVATE。
③SUPERCLASS - 单个类名称,或为空。如果存在,则新类名称后面将有一个 extends ${SUPERCLASS} 子句。
④INTERFACES - 以英文逗号分隔的接口列表,或为空。如果存在,则父类后面将有一个 implements ${INTERFACES} 子句;如果没有父类,则类名称后面将有一个该子句。对于接口和注释类型,接口具有 extends 关键字。
⑤ABSTRACT - 相应类是否应为抽象类。其值可以为 TRUE 或 FALSE。
⑥FINAL - 相应类是否应为最终类。其值可以为 TRUE 或 FALSE。

参考:
https://stackoverflow.com/questions/62259206/android-studio-4-0-new-class/62506705#62506705

https://developer.android.com/studio/write/create-java-class#variables

https://developer.android.com/studio/write/create-java-class#templates

ViewModelProviders弃用


随着版本的更新,jetpack实例化ViewModel子类,ViewModelProviders弃用

解决办法:
在build.grade中添加依赖(版本可不一样)

implementation’androidx.lifecycle:lifecycle-extensions:2.2.0’

grade之后,在activate或fragment中实例化自定义的ViewModel
先:import androidx.lifecycle.ViewModelProvider;
再:viewModel = new ViewModelProvider(this).get(ViewModel.class);
完整代码:

package com.example.livedatatest;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStoreOwner;
import  androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
     
    ViewModelWithLiveData viewModelWithLiveData;
    TextView textView;
    ImageButton imageButton1,imageButton2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        imageButton1 = findViewById(R.id.imageButton);
        imageButton2 = findViewById(R.id.imageButton2);
        viewModelWithLiveData = new ViewModelProvider(this).get(ViewModelWithLiveData.class);
        
    }
}

你可能感兴趣的:(Android,android,java)