小编yby*_*byb的帖子

什么是挂起协程?

我是一个初学者学习coroutines

不完全是,但我对 a 是什么有一点了解coroutine

suspend function也很难,但需要一点理解。

我正在一步步学习,但有些地方我不明白。

那是suspendCoroutine。在示例代码中,suspendCoroutineContinuation在块中使用,但我不知道这两个是什么。

我看过其他网站,但找不到任何可以轻松解释的地方。

您能简单地解释一下suspendCoroutine和 的Continuation用途吗?如果可能的话,可以举个例子吗?

suspend callback coroutine kotlin kotlin-coroutines

29
推荐指数
2
解决办法
1万
查看次数

类“action”不是抽象的,也没有实现抽象成员 public abstract val actionId: Int 在 androidx.navigation.NavDirections 中定义

我使用的版本2.4.0-alpha04是为了方便multi-backstack使用navigation. (开发文档

但我收到以下错误:

Class 'ActionDialogToWriteRoutine' is not abstract and does not implement abstract member public abstract val actionId: Int defined in androidx.navigation.NavDirections
Run Code Online (Sandbox Code Playgroud)

我首先在这里搜索以修复错误,并发现具有相同错误的问题。(这里

我在该链接中看到一个答案,说该错误已从 开始修复v2.4.0-alpha02

但我仍然遇到同样的错误。

所以我根据我的情况再次发布这个问题。

发生了什么?

构建.gradle[应用程序]

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'

    // safe args
    id 'androidx.navigation.safeargs.kotlin'
}

dependencies {
    def lifecycle_version = "2.3.1"
    def nav_version = "2.4.0-alpha04"

    // AAC
    implementation("androidx.fragment:fragment-ktx:1.3.4")

    // Navigation Component
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

}
Run Code Online (Sandbox Code Playgroud)

nav_graph.xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-navigation

9
推荐指数
1
解决办法
4932
查看次数

通过视图模型和使用工厂创建视图模型之间的区别?

我正在研究ViewModel将其应用到MVVM设计模式中。

有一个使用方法by viemodels()和一个ViewModelProvider.Factory在视图模型创建中使用的方法。

by viewModels()创建一个ViewModel object.

ViewModelProvider.Factory还创建Viewmodel objects.

这两者有什么区别?

另外,在一些示例代码中,我看到注释中的代码3,其中使用了by viewModels()and factory。这是什么意思?

class WritingRoutineFragment : Fragment() {
    private val viewModel: WriteRoutineViewModel by viewModels() // 1
    private lateinit var viewModelFactory: WriteRoutineViewModelFactory

//  private val viewModel: WriteRoutineViewModel by viewModels(
//        factoryProducer = { viewModelFactory } // 3.What does this code mean?
//  )

    override fun onCreateView(inflater: LayoutInflater,
                              container: ViewGroup?,
                              savedInstanceState: Bundle?): View? { …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-mvvm android-viewmodel

6
推荐指数
1
解决办法
4747
查看次数

Android:哪里可以查看最新版本的匕首柄?

我正在寻找developer doc要使用的最新版本Dagger Hilt,但找不到与我在网上看到的版本类似的版本。

在使用的其他网络示例代码中hilt,我添加了 hilt 版本2.28或gradle,但我在开发人员文档2.41中找不到任何类似的版本。

有什么改变吗?

android dagger-hilt

5
推荐指数
2
解决办法
4531
查看次数

房间错误:查询返回的列没有字段

在此输入图像描述

我制作了一个如图所示的屏幕。

如您所见,它们Set information items位于red box.

我想将这些数据存储在Room DB.

red box由 组成Workout Class,其中包含blue box( )。WorkoutSetInfo class

我只想从 Room 获取列表set information

但是我编写了一个查询来获取 的列表set information,但出现以下错误:

error: The columns returned by the query does not have the fields [id,set,weight,reps] in com.example.lightweight.data.db.entity.WorkoutSetInfo even though they are annotated as non-null or primitive. Columns returned by the query: [sets]
    public abstract androidx.lifecycle.LiveData<java.util.List<com.example.lightweight.data.db.entity.WorkoutSetInfo>> getWorkoutSetInfoList()
Run Code Online (Sandbox Code Playgroud)

我的类似问题已经有好几个了,但我还是没能解决。如何只获取设置信息的列表?


锻炼设置信息

data class WorkoutSetInfo(
    val id: String …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-room

4
推荐指数
1
解决办法
5402
查看次数

在我的情况下,如何修复“无法从当前目的地找到导航操作/目的地”错误?

我在用bottom navigation

在切换的屏幕中,还有打开dialog fragment.

我也为此使用了导航。

这是因为,一旦dialog完成,data就必须传递到打开对话框的屏幕。

我用的safe args是这个。

但我遇到了与标题相同的错误。

我知道错误在哪里,但我不知道为什么会发生。

根据Stack Overflow上的搜索,有人遇到了和我一样的问题,但似乎并不是一个确切的解决方案,因为情况不同。

导航图

<navigation 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"
    android:id="@+id/nav_graph"
    app:startDestination="@id/calendar">
    <fragment
        android:id="@+id/calendar"
        android:name="com.example.writeweight.fragment.CalendarFragment"
        android:label="fragment_calendar"
        tools:layout="@layout/fragment_calendar" >
    </fragment>
    <fragment
        android:id="@+id/list"
        android:name="com.example.writeweight.fragment.WorkoutListFragment"
        android:label="fragment_workout_list"
        tools:layout="@layout/fragment_workout_list" />
    <fragment
        android:id="@+id/write"
        android:name="com.example.writeweight.fragment.WritingRoutineFragment"
        android:label="WritingRoutineFragment"
        tools:layout="@layout/fragment_writing_routine">
        <action
            android:id="@+id/action_write_to_bodyPartDialog"
            app:destination="@id/bodyPartDialog" />
        <argument
            android:name="title"
            app:argType="string"
            android:defaultValue="Write" />
    </fragment>
    <dialog
        android:id="@+id/bodyPartDialog"
        android:name="com.example.writeweight.fragment.BodyPartDialogFragment"
        android:label="BodyPartDialogFragment"
        tools:layout="@layout/fragment_body_part_dialog">
        <action
            android:id="@+id/action_bodyPartDialog_to_write"
            app:destination="@id/write">
        </action>
    </dialog>
</navigation>
Run Code Online (Sandbox Code Playgroud)

主要活动

class MainActivity : AppCompatActivity() {
    private lateinit var bottomNav: BottomNavigationView
    private …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-navigation android-safe-args

3
推荐指数
1
解决办法
6977
查看次数

如何向 MutableLiveData 中的 List 添加数据?

我想将一个项目添加到 a Listof MutableLiveDatain中ViewModel

Listread-only因为它是用初始化的listOf()

但在特定情况下我想添加一个项目。

我以前是这样做的toMutableList()type cast但是调试的结果是没有任何List变化LiveData

如何将数据应用到Lista LiveData

class WriteRoutineViewModel : ViewModel() {
    private var _items: MutableLiveData<List<RoutineModel>> = MutableLiveData(listOf())

    val items: LiveData<List<RoutineModel>> = _items

    fun addRoutine(workout: String) {
        val item = RoutineModel(workout, "TEST")
        _items.value?.toMutableList()?.add(item) // nothing change
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin android-viewmodel

3
推荐指数
1
解决办法
7640
查看次数

为什么在导航中切换屏幕时无法获取 null 作为参数?

我使用navigationSafeArgsswitch screenspass data

\n

当在屏幕上选择数据时A,数据在屏幕切换的同时传输。

\n

但是,有时屏幕会在没有任何操作的情况下A切换到屏幕B

\n

null我决定在这种情况下发送。

\n

但我不断收到以下错误:

\n
E/AndroidRuntime: FATAL EXCEPTION: main\n    Process: com.example.lightweight, PID: 9555\n    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\n     Caused by: java.lang.reflect.InvocationTargetException\n        at java.lang.reflect.Method.invoke(Native Method)\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\xc2\xa0\n     Caused by: java.lang.reflect.InvocationTargetException\n        at java.lang.reflect.Method.invoke(Native Method)\n        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:54)\n        at androidx.navigation.NavArgsLazy.getValue(NavArgsLazy.kt:35)\n        at com.example.lightweight.fragment.WriteRoutineFragment.getArgs(WriteRoutineFragment.kt:20)\n        at com.example.lightweight.fragment.WriteRoutineFragment.onViewCreated(WriteRoutineFragment.kt:44)\n        at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2985)\n
Run Code Online (Sandbox Code Playgroud)\n

导航.xml

\n
<fragment\n        android:id="@+id/writeRoutine"\n        android:name="com.example.lightweight.fragment.WriteRoutineFragment"\n        android:label="fragment_write_routine"\n        tools:layout="@layout/fragment_write_routine" >\n        <action\n            android:id="@+id/action_writeRoutineFragment_to_workoutListTabFragment"\n            app:destination="@id/workoutListTabFragment" />\n …
Run Code Online (Sandbox Code Playgroud)

android android-navigation android-safe-args android-navigation-graph

2
推荐指数
1
解决办法
2223
查看次数

我应该如何在 Kotlin 中设置 asList 的返回类型?

在此处输入图片说明 我正在学习,同时将编写的代码更改JavaKotlin.

但我对List collection使用Arrays.asListin感到困惑Java

当我将返回类型设置为 时List<String>asList会引发错误。

在 的文档中asList,返回类型是 List,为什么不允许呢?

IDE,解决办法是将返回类型改为MutableList<Array<String>>?present.. MutableList<Array<String>>?是什么意思

不仅仅是一个 MutableList,Mutable<ArrayList> 是什么意思?

List, MutableList, ArrayList.. 我不知道适合哪个

枚举类

enum class BodyType(_resourceId: Int) {
    CHEST(R.array.chest_workout_list),
    BACK(R.array.back_workout_list),
    LEG(R.array.leg_workout_list),
    SHOULDER(R.array.shoulder_workout_list),
    BICEPS(R.array.biceps_workout_list),
    TRICEPS(R.array.triceps_workout_list),
    ABS(R.array.abs_workout_list);

    @ArrayRes
    private val resourceId: Int = _resourceId


    fun getResourceId() : Int = resourceId
}
Run Code Online (Sandbox Code Playgroud)

界面

interface WorkoutListSource  {
    fun getWorkoutListByPart(type: BodyType) : ArrayList<String>?
}
Run Code Online (Sandbox Code Playgroud)

WorkoutListLocalSource.kt

class …
Run Code Online (Sandbox Code Playgroud)

java collections kotlin android-studio

1
推荐指数
1
解决办法
106
查看次数