我最近开始使用 ViewModel 和 AndroidViewModel,我发现有不同的方法来初始化 viewModel 实例,对我来说一切都很好,我只是想知道何时使用哪一种?我应该在哪里初始化 viewModel 对象?以下是获取 viewModel 实例的不同方法,并且对我有用:
val myViewModel1 = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)
val myViewModel2 = ViewModelProvider.AndroidViewModelFactory(this.application).create(MyViewModel::class.java)
val myViewModel3 = ViewModelProvider(this).get(MyViewModel::class.java)
val myViewModel4: MyViewModel by viewModels()
val myViewModel5 by viewModels<MyViewModel>()
Run Code Online (Sandbox Code Playgroud)
对我来说最简单和最简单的是第三、第四和第五,但是我不知道这五种方法有什么区别,也请让我知道是否有其他方法或最佳方法来初始化我的 viewModel 对象,我在声明全局变量时对其进行初始化,可以在声明时初始化还是应该在某个生命周期方法内完成?
由于我将 Android Studio 更新为Bumblebee项目级别的 build.gradle 文件包含plugins以下块:
plugins {
id 'com.android.application' version '7.1.1' apply false
id 'com.android.library' version '7.1.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
此处,之前位于顶级 build.gradle 文件中的存储库设置现在位于 settings.gradle 文件中。
通过此更改,我无法向我的应用程序添加新插件,我想将以下插件添加到我已添加到应用程序级别的项目中build.gradle。
apply plugin: 'kotlin-android-extensions'
apply plugin: "androidx.navigation.safeargs.kotlin"
Run Code Online (Sandbox Code Playgroud)
为了完成这项工作,我需要在我的项目级别 build.gradle 中添加类路径,但是由于最近 build.gradle 结构的更改,我不确定如何在我的项目级别添加以下行build.gradle
dependencies {
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0"
}
Run Code Online (Sandbox Code Playgroud)
我试图在https://developer.android.com/studio/releases/gradle-plugin中找到解决方案,但是我看不到任何解决方案,但是我发现这个更改来自带有 gradle 插件的 Android Studio Bumblebee版本7.0.0
请帮我添加依赖项。
我正在使用Cursor从图库中获取图像并从图库中获取所有图像,有没有办法只获取少数最近的图像,例如最近捕获的 20 张图像。
我面临的另一个问题是图像从旧到新的顺序,我想以相反的顺序(从新到旧)获取图像。
final String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Run Code Online (Sandbox Code Playgroud)
我获取图像的代码:
public void getImg(){
Cursor imagecursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
int image_column_index = imagecursor
.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();
this.thumbnails = new Bitmap[this.count];
this.arrPath = new String[this.count];
this.thumbnailsselection = new boolean[this.count];
for (int i = 0; i < this.count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null);
arrPath[i] …Run Code Online (Sandbox Code Playgroud) 我正在使用线圈库在可组合视图中加载图像,并且我想为我的线圈图像可组合项定义固定高度和宽度,但是线圈图像可组合类中缺少修饰符,以下是我正在使用的代码片段。
AsyncImage(
model = limit.imgUrl,
contentDescription = null
)
Run Code Online (Sandbox Code Playgroud)
如何使宽度和高度固定,而不管图像分辨率如何。
android ×4
kotlin ×2
build.gradle ×1
coil ×1
composable ×1
cursor ×1
gradle ×1
lifecycle ×1
mvvm ×1
viewmodel ×1