我正在使用BottomSheetBehavior原始支持库:
implementation 'com.android.support:design:27.1.1'
Run Code Online (Sandbox Code Playgroud)
当我迁移使用新androidx库时虽然BottomSheetBehavior缺少了.上述支持库的映射也不在AndroidX重构列表中,但迁移工具将其删除.
我错过了将BottomSheetBehavior包含在新androidx库中.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.material:material:1.0.0-beta01'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ReactiveX
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'
implementation 'com.android.support:design:28.1.0'
// Android Compatability Libraries
// Version: https://developer.android.com/topic/libraries/support-library/refactor
implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0-beta01'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-beta01'
implementation 'androidx.recyclerview:recyclerview:1.0.0-beta01'
// Android Navigation Component
// Check here for updated version info - will move to androidx soon.
// https://developer.android.com/topic/libraries/architecture/adding-components
def nav_version = "1.0.0-alpha04"
// use -ktx for Kotlin
implementation …Run Code Online (Sandbox Code Playgroud) 我正在尝试将该WHEN子句用于>或<比较.
这不编译.有没有办法在比较中使用正常的布尔运算符集(<=,> =>)来启用它?
val foo = 2
// doesn't compile
when (foo) {
> 0 -> doSomethingWhenPositive()
0 -> doSomethingWhenZero()
< 0 -> doSomethingWhenNegative()
}
Run Code Online (Sandbox Code Playgroud)
我试图找到一个无限范围比较,但也无法使这项工作?是否可以将其写为无界范围?
// trying to get an unbounded range - doesn't compile
when (foo) {
in 1.. -> doSomethingWhenPositive()
else -> doSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)
你可以将整个表达式放在第二部分,这是好的,但似乎是不必要的重复.至少它编译和工作.
when {
foo > 0 -> doSomethingWhenPositive()
foo < 0 -> doSomethingWhenNegative()
else -> doSomethingWhenZero()
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这比我们多年来一直在做的if-else替代方案更简单.就像是:
if ( foo > 0 ) {
doSomethingWhenPositive()
} …Run Code Online (Sandbox Code Playgroud) 是否可以使用Spotify iOS SDK离线访问曲目?我没有找到任何文档或示例来说明这是如何实现的.
一些旧问题表明它已在弃用的LibSpotifylibrary中提供,但强烈建议使用新的Spotify iOS SDK.
有一个Android离线播放的请求,但即使这已经有将近两年了,我没有找到关于iOS SDK的任何内容.
iOS 10现在需要用户的许可才能访问媒体库.我们在使用之前检查是否可以访问媒体库,如果没有,我们会再次使用[MPMediaLibrary requestAuthorization:来请求用户授权.
我希望这会显示相同的弹出窗口请求来访问我们在应用启动时获得的媒体库,但没有任何反应.它只是MPMediaLibraryAuthorizationStatusDenied从之前的状态返回.
requestAuthorization的文档目前还不完整,所以我不知道我是不是错误地使用了这个,或者还有其他错误.
if ( MPMediaLibrary.authorizationStatus == MPMediaLibraryAuthorizationStatusAuthorized)
{
// we already have access to the Media Library - use it here...
}
else
{
// We expect this to show a popup so the user can grant access, but does not work
[MPMediaLibrary requestAuthorization:^(MPMediaLibraryAuthorizationStatus authorizationStatus)
{
if ( authorizationStatus == MPMediaLibraryAuthorizationStatusAuthorized )
{
// success: the user authorized - use it here...
}
else
{
// user did not authorize …Run Code Online (Sandbox Code Playgroud) Autoresizing在使用XCode 9构建iOS11时,看起来视图不再可靠.
几个视图的布局最终会在XIB中定位控件,但是没有进行适当的调整.这在iOS10中运行良好,适用于在iOS11中运行的旧应用程序.但是,重建应用程序的定位和大小调整失败.
有什么改变会影响使用autoresizingmask吗?
有没有办法自动转换AutoResizing为AutoLayout and Constraints?
编辑:
给出麻烦的控件是UINavigationBar和UIToolBar.
我正在尝试将导航架构组件(NavHostFragment) 与导航抽屉(widget.NavigationView) 一起使用。我收到以下两个错误之一。
1) 多次从抽屉中选择物品时可能会发生这种情况:
java.lang.IllegalArgumentException: navigation destination app.myDomain.navdrawertrials:id/action_rootFragment_to_settingsFragment is unknown to this NavController
2)这发生在我的真实代码库中,该代码库的设置方式与 AFAICT 下面的简化示例相同。为什么不设置当前导航节点?
java.lang.IllegalStateException: no current navigation node
简化代码
主要活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
setupToolbar()
setupNavDrawer()
setupNavigation()
}
private fun setupToolbar() {
setSupportActionBar( toolbar )
}
private fun setupNavigation() {
val navController = findNavController( R.id.nav_host_fragment)
setupActionBarWithNavController( navController, main_activity_drawer_layout )
}
private fun setupNavDrawer() {
val toggle = ActionBarDrawerToggle(
this,
main_activity_drawer_layout,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close)
main_activity_drawer_layout.addDrawerListener(toggle) …Run Code Online (Sandbox Code Playgroud) android navigation-drawer android-architecture-components android-architecture-navigation
我们有以下警告,ARMEABI不是项目的目标.
WARNING: ABIs [arm64-v8a,armeabi-v7a,armeabi] set by 'android.injected.build.abi' gradle flag contained 'ARMEABI' not targeted by this project.
我们不会尝试使用ARMEABI,因为它已被弃用且不应再使用.这是我们build.gradle中的abiFilters,用于设置我们正在使用的内容,并且未列出'armeabi'.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
// these platforms cover 99% percent of all Android devices
}
Run Code Online (Sandbox Code Playgroud)
什么是android.injected.build.abi被中提到的错误?
引起ARMEABI参考的原因是什么?
我想使用策略模式来注册一组实现协议的对象.当我设置它时,我在尝试设置作为协议一部分的委托时遇到编译错误.
出于讨论目的,我从Swift电子书的代表团章节略微重写了DiceGame.意义的变化是:
如果我们使用具体类(snakesAndLadders),我们可以设置委托.但是,如果我们使用'let'将其作为协议(diceGameAsLet)保存,则会出现编译错误,但如果我们将变量保存为'var'(diceGameAsVar),则会编译.
它很容易解决,但是,委托本身永远不会改变,因此应该保持为"let"常量,因为它只是内部属性发生变化.关于协议以及它们如何工作和应该如何使用,我一定不能理解(可能是微妙但重要的).
class Dice
{
func roll() -> Int
{
return 7 // always win :)
}
}
protocol DiceGame
{
// all DiceGames must work with a DiceGameDelegate
var delegate:DiceGameDelegate? {get set}
var dice: Dice {get}
func play()
}
protocol DiceGameDelegate
{
func gameDidStart( game:DiceGame )
func gameDidEnd( game:DiceGame )
}
class SnakesAndLadders:DiceGame
{
var delegate:DiceGameDelegate?
let dice = Dice()
func play()
{
delegate?.gameDidStart(self)
playGame()
delegate?.gameDidEnd(self)
}
private func playGame() …Run Code Online (Sandbox Code Playgroud) 我们的应用程序中正在丢失声音(没有声音),但这会导致所有其他应用程序也失去声音.我不知道我们怎么可能阻止来自Apple Music应用程序之类的外部应用程序的声音.
我们正在抛弃AVAudioSession会话的内容,在声音工作与否之间我们看不出任何差异.我们已经确认路线输出仍然是iPhone的扬声器,即使我们丢失了声音.
这种情况发生在带有扬声器的iPhone 6s和6s Plus上.我们可以通过改变输出路径来"修复"音频,例如插入和拔出耳机.
如何影响播放其他应用程序声音的能力,这可能有助于解决正在发生的事情?
我经常想要保存一个不能为空或空白的字符串- 空格还不够好。编译器可以String?很好地防止 null,我们可以使用它aNullableString.isNullOrBlank()来检查它是否为 null 或空白。但是,这要求在使用空白支票的所有地方都对其进行处理,然后在空白支票时处理错误,如果错过某个位置,可能会导致意外错误。
是否有更简单的方法来定义类型或扩展,以String强制字符串不能为空?
当存在多个具有通用代码的目标时,我无法生成使用 ObjC 中的 Swift 类所需的 swift 标头。
我创建了两个目标My OSX App和My iOS App。这些目标共享 ObjC 类调用 Swift 类的通用代码。
正如同一项目中的 Swift 和 ObjC中所述,我可以添加#import "My_iOS_App-Swift.h"到我的 ObjC 类并从My iOS App目标编译它。
但是,这不会从My OSX App目标编译,因为包含需要与模块名称匹配。它正在寻找#import "My_OSX_App-Swift.h"但公共代码不使用该包含。
在多个目标之间共享的代码中混合/匹配 Swift/ObjC 的正确方法是什么?我可以手动更改每个目标以使用 common MyApp-Swift.h,但这感觉不对并且可能会导致其他问题。
ios ×2
kotlin ×2
swift ×2
android ×1
android-architecture-components ×1
android-architecture-navigation ×1
android-ndk ×1
androidx ×1
audio ×1
autolayout ×1
bottom-sheet ×1
core-audio ×1
delegates ×1
ios10 ×1
ios11 ×1
objective-c ×1
spotify ×1
xcode9 ×1