小编sas*_*568的帖子

有没有办法在24以下的Android API上使用Java 8功能接口?

我可以使用retrolambda来启用Android API级别<24的lambdas.这样可行

myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
Run Code Online (Sandbox Code Playgroud)

这也有效

Runnable runLater = () -> Timber.d("Lambdas work!");
runLater.run();
Run Code Online (Sandbox Code Playgroud)

但是这个没有

Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
Run Code Online (Sandbox Code Playgroud)

最后一个适用于Android API Level 24,但在其他设备上,此代码会导致崩溃

java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
Run Code Online (Sandbox Code Playgroud)

我试图启用Java 8.而不是使用retrolambda.前两个代码示例仍然有效,尽管butterknife停止工作.https://developer.android.com/preview/j8-jack.html#configuration这里ava.util.function被认为是支持的,但在运行第三个时,我仍然得到一个崩溃,这一次却是有一点不同

java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
Run Code Online (Sandbox Code Playgroud)

java lambda android functional-interface retrolambda

21
推荐指数
2
解决办法
6780
查看次数

导航嵌套时,导航的后退堆栈会丢失

我有一个看起来像这样的导航

Frag1 -> Frag2 -> Frag3
Run Code Online (Sandbox Code Playgroud)

里面Frag2有一个NavHostFragment有自己的导航

InnerFrag1 -> InnerFrag2
Run Code Online (Sandbox Code Playgroud)

如果我这样做

  1. 导航Frag2
  2. 导航至InnerFrag2内部Frag2
  3. 导航Frag3
  4. 回去

然后我会看到InnerFrag2里面Frag2,当我正常按回时,我会从里面进入InnerFrag2InnerFrag1Frag2现在它会变成Frag1

这是我里面的导航处理Frag2


    private val backPressedCallback = OnBackPressedCallback {
        navHostFragment.navController.navigateUp()
    }


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        requireActivity().addOnBackPressedCallback(backPressedCallback)
    }

    override fun onDestroyView() {
        activity?.removeOnBackPressedCallback(backPressedCallback)
        super.onDestroyView()
    }

    private val navHostFragment: NavHostFragment
        get() = childFragmentManager.findFragmentById(R.id.innerNavHostFragment) as NavHostFragment

Run Code Online (Sandbox Code Playgroud)

当返回到Frag2导航主机中的片段时是正确的,但是向后导航会远离,Frag2因为内部导航主机的返回堆栈丢失。我可以以某种方式坚持它或以其他方式修复它吗?

编辑: …

android android-fragments kotlin android-architecture-navigation

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

Android,无法使用Retrofit和RxJava 2构建应用程序

这是依赖项

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
Run Code Online (Sandbox Code Playgroud)

当我尝试运行应用程序时,我收到此错误

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
Run Code Online (Sandbox Code Playgroud)

com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在APK META-INF/rxjava.properties File1中复制的重复文件:C:\ Users\abondarenco.gradle\caches\modules-2\files-2.1\io.reactivex.rxjava2\rxjava\2.0.7\21734c0092a5d3c3ec99510e50c1ff76bdf0c65a\rxjava-2.0.7.jar File2:C:\ Users\abondarenco.gradle\_caches\modules-2\files-2.1\io.reactivex\rxjava\1.2.0\42bfaf64c94f3848ebf5cf1c2ea4ec9d1b3ac6c8\rxjava-1.2.0.jar

我尝试运行应用程序没有adapter-rxjava它工作,但当我添加适配器它说有重复文件,它下载RxJava 1 ...

android rx-java retrofit rx-java2

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

将 Python 代码转换为 Kotlin

我找到了生成 n 种不同颜色的代码。我拿了代码并用它做了一门课

import colorsys
import itertools
from fractions import Fraction

class DistinctColorsGenerator:
    def __init__(self):
        self._bias = lambda x: (math.sqrt(x / 3) / Fraction(2, 3) + Fraction(1, 3)) / Fraction(6, 5)
        self._gen_rgb = lambda x : colorsys.hsv_to_rgb(*x)
        self._flatten = itertools.chain.from_iterable
        self._hsvs = lambda: self._flatten(map(self._hsv, self._fracs()))
        self._rgbs = lambda: map(self._gen_rgb, self._hsvs())
        self._gen_colors = lambda: map(self._gen_color, self._rgbs())

    def generate(self, number):
        return list(itertools.islice(self._gen_colors(), number))

    def _zenos_dichotomy(self):
        for k in itertools.count():
            yield Fraction(1, 2 ** k)

    def _fracs(self):
        yield 0
        for k …
Run Code Online (Sandbox Code Playgroud)

python kotlin

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

从书中复制的旧代码中的语法错误

这是一本80年代的书,作者是法文,C。Jablon和JC Simon。这本书有俄文翻译。标题 ”?????????? ??? ??? ?????????? ????????????? ? ??????” 意思是“将ECM应用于物理中的数值建模”,其中ECM代表电子计算机(不确定如何将其翻译成英语,但是用俄语用该名称来称呼计算机)。我曾尝试用俄语,英语或法语以数字形式用Google搜索这本书,但没有找到任何东西。如果仍然有帮助,请使用俄语提供以下照片:

https://drive.google.com/open?id=0B2MCX8tD_-VNLTh3dWx0ejJIZW8

这是与书中所印刷代码完全相同的代码

    parameter nn = 100
    dimension a(nn), b(nn), c(nn), d(nn), x(nn), u(nn)
    dimension xex(nn), test(nn)
    common /thomas/ bet(nn), gam(nn)
    common /perm/ ip(10)

    call iniper(10, -1)
    call inhuni(-1)
    read 222, iter, ifin
    print 1000, iter, ifin
    fifin = 1./float(ifin)
    fiter = 1./float(iter)
    pi = 3.14159265
    pi2 = pi * pi
    xa = 1.
    xc = 1.
    read 111, rb
1   continue
    read 222, n
    print 5000, n
    if(n .gt. nn) …
Run Code Online (Sandbox Code Playgroud)

fortran legacy-code

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