该HlsMediaSource()
方法已弃用(我目前正在使用exoplayer:2.6.1
).建议使用HLS介质的方法是什么?
虽然这个问题已经在其他主题的早期版本中得到了解答,但现在没有一个答案对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).
如何将参数传递给嵌套的Navigation体系结构组件图?
假设我构造了导航图以从导航FragmentA --> Nested
,其中Nested
包含FragmentB --> FragmentC
...
如果这是一个纯FragmentA --> FragmentB...
图形,我将使用设置导航FragmentADirections.actionFragmentAToFragmentB(argument = foo)
。但是,一旦您B --> C
变成Nested
... ,该操作就会采用零参数。
那我该怎么办?
android android-architecture-components android-architecture-navigation
下面块中的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) 假设我有一个interface Base
并且我们实现了该接口class Base1 : Base
.
我希望表单中有一个扩展函数
fun ArrayList<Base>.myFun()
Run Code Online (Sandbox Code Playgroud)
也工作arrayListOf(Base1(), Base1()).myFun()
,但它没有.它要求列表Base
不是类型Base1
.
这不是很奇怪吗?或者我只是错过了什么?
而且,我可以选择在接口的所有子类上编写一个函数吗?
谢谢!
在Android的程式码实验室用于导航做得很好,说明如何用一起使用的架构组件导航BottomNavigationView
.但是,假设我在2个标签BottomNavigationView
,TAB1和TAB2.让我们说在Tab1中你可以浏览片段Frag1 - > Frag2.现在,每当我去TAB2,然后回到TAB1,片段回栈Frag1,2走了,并与起点更换Frag1一次.
我在应用程序中需要做什么,以便即使我更改标签,BottomNavigationView
与导航一起保持其后堆栈完好无损?并且,还保持后退/上行按钮行为与指南同步.
以前我通过使用ViewPager
和管理后台堆栈来完成这项任务,但这并不像使用新导航的正确方法.
提前致谢!
编辑:
还有一个更详尽的答案在这里.
android android-navigation bottomnavigationview android-architecture-components android-jetpack
我一直在使用这里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
假设我有一个类似的视图结构
<ConstraintLayout>
<CustomViewLayout>
...
...
</CustomViewLayout>
</ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
这是简化的,但我在底部使用上面的内容,我有时ConstraintLayout
根据我的CustomViewLayout
身高改变底部的高度和底部的高度.我的问题是,如果部分CustomViewLayout
被切断,那就是 - 它有点在屏幕之外,因为ConstraintLayout
它不够高 - 我不再能够获得正确的"全高".在这种情况下,我总是只看到视图屏幕上的可见部分.
那么如何才能获得部分偏离屏幕的视图的全高?
谢谢!
编辑:
我应该补充一点,我尝试的是一个globalLayoutListener
,以及一个customViewLayout.post {}
(customViewLayout.height
当然通常).但是当视图的一部分位于屏幕之外时,这些都不会测量整个高度.
猜猜我缺少明显的东西在这里,但......我存储在数据uiModel
中DiaryViewModel类,因为我使用的架构组件,我期待通过屏幕旋转保留数据-但事实并非如此.我对原因视而不见.
这是一个精简的片段
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
我正在储蓄
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...
错误。
我被困住了。所以请帮忙!我如何让迁移工作?
是否可以提供一次自己的ViewModelStore
forViewModelProviders
实现来代替默认的实现?
更准确地说,我有兴趣添加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
android ×11
android-architecture-components ×6
android-room ×2
java ×2
kotlin ×2
android-architecture-navigation ×1
android-view ×1
androidx ×1
debugging ×1
exoplayer2.x ×1
inheritance ×1
robolectric ×1
rx-android ×1
rx-java ×1
viewmodel ×1