小编Jim*_*ask的帖子

BottomSheetBehavior不在androidX库中

我正在使用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)

bottom-sheet androidx

63
推荐指数
3
解决办法
2万
查看次数

使用Kotlin WHEN子句进行<,<=,> =,>比较

我正在尝试将该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)

kotlin

24
推荐指数
4
解决办法
6352
查看次数

Spotify iOS SDK可以访问脱机轨道

是否可以使用Spotify iOS SDK离线访问曲目?我没有找到任何文档或示例来说明这是如何实现的.

一些旧问题表明它已在弃用的LibSpotifylibrary中提供,但强烈建议使用新的Spotify iOS SDK.

有一个Android离线播放的请求,但即使这已经有将近两年了,我没有找到关于iOS SDK的任何内容.

spotify

8
推荐指数
0
解决办法
726
查看次数

以编程方式请求授权媒体库失败

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)

ios mpmedialibrary ios10

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

自动调整不适用于iOS11/XCode 9

Autoresizing在使用XCode 9构建iOS11时,看起来视图不再可靠.

几个视图的布局最终会在XIB中定位控件,但是没有进行适当的调整.这在iOS10中运行良好,适用于在iOS11中运行的旧应用程序.但是,重建应用程序的定位和大小调整失败.

有什么改变会影响使用autoresizingmask吗?

有没有办法自动转换AutoResizingAutoLayout and Constraints

编辑: 给出麻烦的控件是UINavigationBarUIToolBar.

autoresizingmask autolayout ios-autolayout ios11 xcode9

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

将导航架构组件与导航抽屉一起使用

我正在尝试将导航架构组件(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

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

警告:'ARMEABI'不是此项目的目标

我们有以下警告,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参考的原因是什么?

android-ndk

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

设置委托会生成编译错误

我想使用策略模式来注册一组实现协议的对象.当我设置它时,我在尝试设置作为协议一部分的委托时遇到编译错误.

出于讨论目的,我从Swift电子书的代表团章节略微重写了DiceGame.意义的变化是:

  • 协议DiceGame - 声明一个委托
  • class SnakesAndLadders实现DiceGame(以及协议和委托)
  • class Games包含3个SnakesAndLadders实例,1)具体的SnakesAndLadders类2)协议DiceGame的'let'常量3)协议DiceGame的'var'变量

如果我们使用具体类(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)

delegates swift

5
推荐指数
2
解决办法
229
查看次数

没有声音问题可以杀死设备上所有应用的音频

我们的应用程序中正在丢失声音(没有声音),但这会导致所有其他应用程序也失去声音.我不知道我们怎么可能阻止来自Apple Music应用程序之类的外部应用程序的声音.

我们正在抛弃AVAudioSession会话的内容,在声音工作与否之间我们看不出任何差异.我们已经确认路线输出仍然是iPhone的扬声器,即使我们丢失了声音.

这种情况发生在带有扬声器的iPhone 6s和6s Plus上.我们可以通过改变输出路径来"修复"音频,例如插入和拔出耳机.

如何影响播放其他应用程序声音的能力,这可能有助于解决正在发生的事情?

audio core-audio ios avaudiosession

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

如何在 Kotlin 中强制执行空的非空字符串?

我经常想要保存一个不能为空或空白的字符串- 空格还不够好。编译器可以String?很好地防止 null,我们可以使用它aNullableString.isNullOrBlank()来检查它是否为 null 或空白。但是,这要求在使用空白支票的所有地方都对其进行处理,然后在空白支票时处理错误,如果错过某个位置,可能会导致意外错误。

是否有更简单的方法来定义类型或扩展,以String强制字符串不能为空?

kotlin

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

Swift 生成的具有多个目标的标头

当存在多个具有通用代码的目标时,我无法生成使用 ObjC 中的 Swift 类所需的 swift 标头。

我创建了两个目标My OSX AppMy 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,但这感觉不对并且可能会导致其他问题。

objective-c swift

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