小编Alg*_*gar的帖子

不推荐使用ExoPlayer HlsMediaSource()

HlsMediaSource()方法已弃用(我目前正在使用exoplayer:2.6.1).建议使用HLS介质的方法是什么?

android exoplayer2.x

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

Robolectric不支持API级别28

虽然这个问题已经在其他主题的早期版本中得到了解答,但现在没有一个答案对api 28来说对我有用了.

在api 27上,所有Robolectric测试都运行良好.现在,当我的app api目标为28时,它们都会失败.

我有

@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.P])

在我的测试课上.

潜入Robolectrics内部的SdkConfig.java,看起来他们添加了对api 28的支持:

addSdk(Build.VERSION_CODES.P, "P", "4651975", "P");

但是,当在调试器中评估该行代码时,Build.VERSION_CODES.P求值为10000.不知道那里发生了什么.

我正在运行Robolectric 3.8,并尝试使用4.0 alpha版本而没有运气.

我错过了什么?

编辑:现在我只是运行最新的(我能说的)支持的api版本,通过注释测试类@Config(sdk = [Build.VERSION_CODES.O_MR1]).这将为您提供Android 8.1.0(api 27).

android robolectric

14
推荐指数
2
解决办法
2654
查看次数

将参数传递给嵌套的导航体系结构组件图

如何将参数传递给嵌套的Navigation体系结构组件图?

假设我构造了导航图以从导航FragmentA --> Nested,其中Nested包含FragmentB --> FragmentC...

如果这是一个纯FragmentA --> FragmentB...图形,我将使用设置导航FragmentADirections.actionFragmentAToFragmentB(argument = foo)。但是,一旦您B --> C变成Nested... ,该操作就会采用零参数。

那我该怎么办?

android android-architecture-components android-architecture-navigation

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

调试器不会在 RxJava for Android 中的断点处停止

下面块中的Log.d(...)表达式catch(...)被执行(我可以在 Android Studio 中看到日志输出),但调试器不会在同一行设置的断点处停止。这是为什么?调试器在其他断点处停止。

Observable.create(new Observable.OnSubscribe<MobileBankIdSessionResponse.MobileBankIdSession>() {
       @Override
       public void call(final Subscriber<? super MobileBankIdSessionResponse.MobileBankIdSession> subscriber) {
           Schedulers.newThread().createWorker().schedule(new Action0() {
               @Override
               public void call() {
                   try {
                       MobileBankIdSessionResponse r = User.getMobileBankIdSession(reference, nationalIdentity).toBlocking().first();
                       String progressCode = r.getResponse().progress.progressCode;
                       if (StringUtils.equals(progressCode, "COMPLETE")) {
                           subscriber.onNext(r.getResponse());
                           subscriber.onCompleted();
                       } else if (StringUtils.equals(progressCode, "USER_SIGN")
                               || StringUtils.equals(progressCode, "OUTSTANDING_TRANSACTION")) {
                           Schedulers.newThread().createWorker().schedule(this, 2, TimeUnit.SECONDS);
                       } else if (StringUtils.equals(progressCode, "NO_CLIENT")) {
                           subscriber.onError(new Throwable("Fel vid signering"));
                       }
                   } catch (Exception e) {
                       Log.d("AtError", "here");
                       subscriber.onError(e);
                   }
               }
           });
       } …
Run Code Online (Sandbox Code Playgroud)

debugging android android-studio rx-java rx-android

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

接口上的Kotlin扩展

假设我有一个interface Base并且我们实现了该接口class Base1 : Base.

我希望表单中有一个扩展函数

fun ArrayList<Base>.myFun()
Run Code Online (Sandbox Code Playgroud)

也工作arrayListOf(Base1(), Base1()).myFun(),但它没有.它要求列表Base不是类型Base1.

这不是很奇怪吗?或者我只是错过了什么?

而且,我可以选择在接口的所有子类上编写一个函数吗?

谢谢!

android kotlin

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

Android Jetpack使用BottomNavigationView导航正确的后台堆栈

Android的程式码实验室用于导航做得很好,说明如何用一起使用的架构组件导航BottomNavigationView.但是,假设我在2个标签BottomNavigationView,TAB1TAB2.让我们说在Tab1中你可以浏览片段Frag1 - > Frag2.现在,每当我去TAB2,然后回到TAB1,片段回栈Frag1,2走了,并与起点更换Frag1一次.

我在应用程序中需要做什么,以便即使我更改标签,BottomNavigationView导航一起保持其后堆栈完好无损?并且,还保持后退/上行按钮行为与指南同步.

以前我通过使用ViewPager和管理后台堆栈来完成这项任务,但这并不像使用新导航的正确方法.

提前致谢!


编辑:

还有一个更详尽的答案在这里.

android android-navigation bottomnavigationview android-architecture-components android-jetpack

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

无法在后台线程上调用observeForever

我一直在使用这里observeForever()描述的方法来测试Room和LiveData一段时间,并且它运行得很完美.但当我改为Android Studio 3.2(或者如果它是重构,不确定)时,该方法突然停止工作,抛出一个androidx

java.lang.IllegalStateException: Cannot invoke observeForever on a background thread
Run Code Online (Sandbox Code Playgroud)

我们该如何解决这个问题?

android android-room android-livedata android-architecture-components androidx

9
推荐指数
2
解决办法
3613
查看次数

视图的一部分在屏幕外时获取视图高度?

假设我有一个类似的视图结构

<ConstraintLayout>
    <CustomViewLayout>
        ...
        ...
    </CustomViewLayout>
</ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这是简化的,但我在底部使用上面的内容,我有时ConstraintLayout根据我的CustomViewLayout身高改变底部的高度和底部的高度.我的问题是,如果部分CustomViewLayout被切断,那就是 - 它有点在屏幕之外,因为ConstraintLayout它不够高 - 我不再能够获得正确的"全高".在这种情况下,我总是只看到视图屏幕上的可见部分.

那么如何才能获得部分偏离屏幕的视图的全高?

谢谢!

编辑:

我应该补充一点,我尝试的是一个globalLayoutListener,以及一个customViewLayout.post {}(customViewLayout.height当然通常).但是当视图的一部分位于屏幕之外时,这些都不会测量整个高度.

java android android-view kotlin

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

片段中的ViewModel清除屏幕旋转的值

猜猜我缺少明显的东西在这里,但......我存储在数据uiModelDiaryViewModel类,因为我使用的架构组件,我期待通过屏幕旋转保留数据-但事实并非如此.我对原因视而不见.

这是一个精简的片段

class DiaryFragment: Fragment() {
    private lateinit var viewModel: DiaryViewModel

    override onCreateView(...) {
        viewModel = ViewModelProviders.of(this).get(DiaryViewModel::class.java)
        viewModel.getModel().observe(this, Observer<DiaryUIModel> { uiModel ->
            render(uiModel)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

和相应的视图模型.

class DiaryViewModel: ViewModel() {
    private var uiModel: MutableLiveData<DiaryUIModel>? = null

    fun getModel(): LiveData<DiaryUIModel> {
        if (uiModel == null) {
            uiModel = MutableLiveData<DiaryUIModel>()
            uiModel?.value = DiaryUIModel()
        }

        return uiModel as MutableLiveData<DiaryUIModel>
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都能看到这个简单例子中缺少的东西吗?现在,uiModel设置为null旋转屏幕时.

android viewmodel android-fragments android-livedata android-architecture-components

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

Android room迁移添加枚举列表

我正在储蓄

data class Settings(
    val foo: Int
)
Run Code Online (Sandbox Code Playgroud)

进入我的房间数据库版本1。

现在我需要扩展Settings

data class Settings(
    val foo: Int,
    val bar: ArrayList<Baz>
)
Run Code Online (Sandbox Code Playgroud)

在哪里

enum class Baz {
    A, B, C
}
Run Code Online (Sandbox Code Playgroud)

所以我需要迁移到版本 2。

我有 的类型转换器bar。我目前正在尝试类似的事情

val MIGRATION_1_2: Migration = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE settings ADD COLUMN bar TEXT")
    }
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个IllegalStateException: Migration didn't properly handle Settings...错误。

我被困住了。所以请帮忙!我如何让迁移工作?

android android-room android-architecture-components

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

重写 ViewModelStore

是否可以提供一次自己的ViewModelStoreforViewModelProviders实现来代替默认的实现?

更准确地说,我有兴趣添加fun clear(vm: ViewModel)(或使用索引或类似的东西)功能,以便ViewModelStore我可以清除我选择的单个视图模型,而不仅仅是使用内置的ViewModelStore#clear

public final void clear() {
    for (ViewModel vm : mMap.values()) {
        vm.onCleared();
    }
    mMap.clear();
}
Run Code Online (Sandbox Code Playgroud)

这会清除所有视图模型。

java inheritance android android-viewmodel android-architecture-components

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