小编Vah*_*hid的帖子

将 Jetpack Compose 升级到 1.0.0?beta07 后出现 java.lang.NoSuchMethodError

observeAsState将 Jetpack Compose 升级到 1.0.0?beta07 后,在 LiveData 对象上运行时出现以下错误。

java.lang.NoSuchMethodError: No interface method startReplaceableGroup(ILjava/lang/String;)V in class Landroidx/compose/runtime/Composer; or its super classes
Run Code Online (Sandbox Code Playgroud)

文档说升级时会出现错误,为了解决它,必须重新编译依赖于 Compose 的库。

我不知道必须这样做。我尝试再次制作该项目,也无济于事地清除和重建它。

这是我项目中的依赖项:

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling:$compose_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-alpha01'
    implementation 'androidx.activity:activity-compose:1.3.0-alpha07'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    implementation "io.github.vanpra.compose-material-dialogs:datetime:0.4.0"
    implementation "io.github.vanpra.compose-material-dialogs:datetime:0.4.0"
    implementation "androidx.appcompat:appcompat:$appCompatVersion"
    implementation "androidx.activity:activity-ktx:$activityVersion"
    implementation "androidx.room:room-ktx:$roomVersion"
    kapt "androidx.room:room-compiler:$roomVersion"
    androidTestImplementation "androidx.room:room-testing:$roomVersion"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.30"
    api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines"
    api …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-jetpack-compose

24
推荐指数
2
解决办法
2880
查看次数

使用 @HiltViewModel 进行 Jetpack Compose 仪器测试

所以我想测试我的 jetpack compose 项目。在 Android 开发站点上按照 [这些说明] 1运行仪器测试非常容易,但是当您将@HiltViewModel注入添加到组合中时,事情就会变得复杂。

我正在尝试使用具有 @Inject 构造函数的 ViewModel 测试一个非常简单的撰写屏幕。屏幕本身看起来像这样:

@Composable
fun LandingScreen() {
    val loginViewModel: LoginViewModel = viewModel()

    MyTheme {
        Surface(color = MaterialTheme.colors.background) {
            val user by loginViewModel.user.observeAsState()
            if (user != null) {
                MainScreen()
            } else {
                LoginScreen(loginViewModel)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是视图模型:

@HiltViewModel
class LoginViewModel @Inject constructor(private val userService: UserService) : ViewModel() {
    val user = userService.loggedInUser.asLiveData()
}
Run Code Online (Sandbox Code Playgroud)

用户服务当然是由房间数据库支持的,loggedInUser 属性返回一个Flow.

事情在标准运行中按预期工作,但是当尝试在仪器测试中运行它时,它无法注入视图模型。

@HiltAndroidTest
class LandingScreenTest {
    @get:Rule
    var hiltRule …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose dagger-hilt

15
推荐指数
2
解决办法
5059
查看次数

NavigationComponent:片段内的 NavHostFragment

我有这个选项卡式 UI,带有导航组件和BottomNavigationView处理选项卡的组件。我的用例涉及这些选项卡片段之一,以拥有BottomNavigationView自己的选项卡片段。

我认为嵌套导航图对我不起作用,因为我需要有一个 insideNavHostFragment和第二个BottomNavigationView.

所以我在我希望托管内部导航图的片段中。它包含这样的片段。

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/inner_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:defaultNavHost="true"
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来获取上述片段的导航控制器。

通常,当您在进行活动时,您会使用findFragmentByIdsupportFragmentManager为片段提供的 id 来调用 。

val navHostFragment = supportFragmentManager.findFragmentById(R.id.outer_nav_host) as NavHostFragment
Run Code Online (Sandbox Code Playgroud)

所以我尝试从我的内部片段中的活动对象上调用它

requireActivity().supportFragmentManager.findFragmentById(R.id.inner_host_fragment)
Run Code Online (Sandbox Code Playgroud)

findFragmentById返回null。

android android-fragments kotlin android-architecture-navigation

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

Android Studio粘贴问题

每当我尝试将一些代码行粘贴到Android Studio中的文件中时,它的行为如下:

  1. 复制的行覆盖插入位置下方的现有行.
  2. 它为一个命令粘贴了几次(我复制7行并按Ctrl + V一次,它给我49行)

我不知道这是不是我不知道的一些奇怪的编码功能.

如何关闭此行为并使其以普通方式工作?

更新 它不是键盘问题.在Visual Studio中没问题!

android intellij-idea android-studio

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

SqlException:在预期条件的上下文中指定的非布尔类型的表达式,靠近')'

这是我试图对EF7运行的查询

_context.Event.Where(e => e.Invitations.Any(i => i.User.Id == currentUserId));
Run Code Online (Sandbox Code Playgroud)

确实相当简单的查询,我看不到作为条件传递的任何非布尔短语.

Event这是与一对多的关系Invitation.

entity-framework entity-framework-core

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

Ionic 2与formGroup和ngModel形成验证问题

我想实现什么似乎是一个简单的表单验证程序以下这个步行通过我的离子2个项目.

在我的控制器的构造函数中,我使用FormBuilder这样的方法来创建一个formGroup:

this.form = formBuilder.group({
  date: ['', Validators.required],
  client: ['', Validators.required]
});
Run Code Online (Sandbox Code Playgroud)

然后在模板中我添加formControllerName了相关元素的属性,如下所示:

<ion-select formControlName="client" [(ngModel)]="clientId">
Run Code Online (Sandbox Code Playgroud)

并将root元素绑定到'formGroup`,如下所示:

<ion-content [formGroup]="form">
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下错误消息:

ngModel不能用于使用父formGroup指令注册表单控件.请尝试使用formGroup的合作伙伴指令"formControlName".例:

<div [formGroup]="myGroup">
  <input formControlName="firstName">
</div>

In your class:

this.myGroup = new FormGroup({
   firstName: new FormControl()
});

  Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:

  Example:


<div [formGroup]="myGroup">
   <input formControlName="firstName">
   <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">
</div>
Run Code Online (Sandbox Code Playgroud)

正如错误消息所示,以及此StackOverflow线程我添加[ngModelOptions]="{standalone: true}"到我的输入,但它返回另一个错误消息:

模板解析错误:无法绑定到'ngModelOptions',因为它不是'ion-select'的已知属性.

angularjs ionic-framework ionic2 angular

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