小编Anm*_*mol的帖子

为什么从导航组件版本 1.0.0-alpha09 中删除了 addDefaultArguments()?什么是 WorkAround 将 arg 从 Activity 传递到 StartDestination?

您好,我正在研究导航架构组件,并以编程方式为我的活动设置 NavHostFragment。

主活动.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/nav_host"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
     />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

MainActivity.kt :

package com.andor.navigate.demonavigation

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import androidx.navigation.Navigation
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.NavigationUI
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupNavigation()
        NavigationUI.setupActionBarWithNavController(this, NavHostFragment.findNavController(nav_host))

    }

    override fun onSupportNavigateUp(): Boolean = Navigation.findNavController(
        this,
        R.id.nav_host
    ).navigateUp()

    private fun setupNavigation() {
        val navHostFragment = nav_host as NavHostFragment
        val navController = navHostFragment.navController
        val navInflater = …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-architecture-navigation

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

如何在 Jacoco 报告生成中公开“sourceDirectories”?

我正在按照这篇文章为我的项目设置 Jacoco 代码覆盖率。

但我在编写生成报告的任务时遇到错误。

摇篮任务

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
    def debugTree = fileTree(dir: "$project.buildDir/intermediates/javac/debug", excludes: fileFilter)
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code_coverage/debugAndroidTest/connected/**/*.ec'
    ])
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

无法为 org.gradle.testing.jacoco.tasks.JacocoReport 类型的任务 ':app:jacocoTestReport' 设置只读属性 'sourceDirectories' 的值。

jacoco我相信下面的字段现在是私有的。

  • 源目录
  • 类目录
  • 执行数据

我的依赖:classpath "org.jacoco:org.jacoco.core:0.8.4"

另外,我尝试更改版本但没有帮助。

android gradle jacoco test-coverage

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

为什么Dialog没有NavController [Missing]?

我正在尝试在应用程序中使用Nav Component的最新更新

我可以在其中添加dialog(BottomSheetDialogFragmentnav graph

nav_version = "2.1.0-alpha05"
Run Code Online (Sandbox Code Playgroud)

来自我的部分代码nav_graph

    <dialog
        android:id="@+id/settingFragment"
        android:name="com.andor.navigate.notepad.listing.fragment.SettingFragment"
        tools:layout="@layout/fragment_setting">
        <action
            android:id="@+id/action_settingFragment_to_confirmationFragment"
            app:destination="@id/confirmationFragment" />
    </dialog>
    <dialog
        android:id="@+id/confirmationFragment"
        android:name="com.andor.navigate.notepad.ConfirmationFragment"
        tools:layout="@layout/fragment_confirmation" />
Run Code Online (Sandbox Code Playgroud)

在我的设置片段中,我有一个button(logout_btn)来触发动作:action_settingFragment_to_confirmationFragment

OnActivityCreated设置片段中的代码:

    logout_btn.setOnClickListener {
       Navigation.findNavController(view!!).navigate(R.id.action_settingFragment_to_confirmationFragment)
    } 
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时,出现运行时异常:

java.lang.IllegalStateException:查看androidx.constraintlayout.widget.ConstraintLayout {550ae09 VE ............. 1,1-719,526}在androidx.navigation.Navigation.findNavController上未设置NavController (Navigation.java:84)在com.andor.navigate.notepad.listing.fragment.SettingFragment $ onActivityCreated $ 2.onClick(SettingFragment.kt:56)在android.view.View.performClick(View.java:7352) .view.View.performClickInternal(View.java:7318)在android.view.View.access $ 3200(View.java:846)在android.view.View $ PerformClick.run(View.java:27800)在android.os android.os.Handler.dispatchMessage(Handler.java:99)位于android.os.Looper.loop(Looper.java:214)位于android.app.ActivityThread处的.Handler.handleCallback(Handler.java:873)。com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)的java.lang.reflect.Method.invoke(本机方法)的main(ActivityThread.java:7045) os.ZygoteInit.main(ZygoteInit.java:965)

我的目的是从另一个对话框打开一个对话框,但是由于某种原因,我的对话框没有(缺少)NavController。

我已经提到了源代码

android kotlin android-navigation android-architecture-navigation androidx

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

在哪里取消视图中的协程作业?

我在视图(自定义视图)中使用协程,这些视图被添加到回收器视图中。

大部分计算(复杂且漫长)我都在协程上运行scopeIO并更新scopeMain.

但是,当这些视图添加到回收器视图时,它工作得很好,但当我快速滚动时,即使视图不再可见,作业也会在后台运行。

我不知道在哪里取消该工作。我见过的大多数示例代码都是活动中的协程,其中生命周期被正确定义。

我尝试取消其中的作业onDetachedFromWindow,但是当我在回收器视图中快速滚动时,它会取消作业,而当视图再次附加到窗口时,它会变成空视图。

下面是我的协程声明

 CustomView{
    .... 
    ....
    private val job = Job()
    private val scopeMain = CoroutineScope(job + Dispatchers.Main)
    private val scopeIO = CoroutineScope(job + Dispatchers.IO)
    .... 
    ....
    }
Run Code Online (Sandbox Code Playgroud)

由于上述原因,许多作业都处于活动状态,整个应用程序变得缓慢,并且在某些时候还会崩溃。

PS-是否有可能有一个可用于渲染整个 recyclerView 的作业,即所有子视图(CustomView)的相同作业,我相信 new Job() 创建导致了滞后。

我正在开发的演示项目:

已经提到过这个

android kotlin kotlin-coroutines

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