小编fel*_*rce的帖子

使用FlexboxLayoutManager将RecyclerView项目居中

如何RecyclerView使用中心对待所有项目FlexboxLayoutManager?我需要像这样集中的项目:

正确居中的物品

我尝试没有成功: 我的尝试,不正确

我设置布局管理器的代码:

val layoutManager = FlexboxLayoutManager(this)
        layoutManager.setFlexWrap(FlexWrap.WRAP)
        layoutManager.setFlexDirection(FlexDirection.ROW)
        layoutManager.setJustifyContent(JustifyContent.FLEX_START)
        layoutManager.setAlignItems(AlignItems.FLEX_START)

        val adapter = TagAdapter(tags)
        tagRecyclerView.adapter = adapter
        tagRecyclerView.layoutManager = layoutManager
Run Code Online (Sandbox Code Playgroud)

(我试图设置layoutManager.setAlignItems(AlignItems.FLEX_START)layoutManager.setAlignItems(AlignItems.CENTER)然而它没有用...

android android-layout android-recyclerview android-flexboxlayout

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

模拟位置的测试提供程序不适用于 Android 10

模拟位置在 Android 10 上不起作用,调用 addTestProvider 时崩溃:

2020-11-30 00:25:16.855 13189-13256/br.com.tupinikimtecnologia.fakegpslocation E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-2
    Process: br.com.tupinikimtecnologia.fakegpslocation, PID: 13189
    java.lang.IllegalArgumentException: Provider "gps" already exists
        at android.os.Parcel.createException(Parcel.java:2075)
        at android.os.Parcel.readException(Parcel.java:2039)
        at android.os.Parcel.readException(Parcel.java:1987)
        at android.location.ILocationManager$Stub$Proxy.addTestProvider(ILocationManager.java:2022)
        at android.location.LocationManager.addTestProvider(LocationManager.java:1461)
        at br.com.tupinikimtecnologia.fakegpslocation.feature.mock.view.MapsActivity.setMock(MapsActivity.kt:100)
        at br.com.tupinikimtecnologia.fakegpslocation.feature.mock.view.MapsActivity.access$setMock(MapsActivity.kt:34)
        at br.com.tupinikimtecnologia.fakegpslocation.feature.mock.view.MapsActivity$onCreate$1.invokeSuspend(MapsActivity.kt:65)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.LocationManagerService.addTestProvider(LocationManagerService.java:3536)
        at android.location.ILocationManager$Stub.onTransact(ILocationManager.java:958)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)
2020-11-30 00:25:16.857 13189-13256/br.com.tupinikimtecnologia.fakegpslocation I/Process: Sending signal. PID: 13189 SIG: 9
Run Code Online (Sandbox Code Playgroud)

代码:

override fun onCreate(savedInstanceState: Bundle?) { …
Run Code Online (Sandbox Code Playgroud)

android mocking android-location

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

Android Studio模拟器上的kvm权限被拒绝

当我尝试运行AVD时,我得到了这个错误:

/dev/kvm device permission denied
Run Code Online (Sandbox Code Playgroud)

是的,我知道,我没有访问权限/dev/kvm,我知道我可以通过更改/dev/kvm我的用户权限来"解决"它,并将我的用户设置为kvm组,它正在工作,但是当我重新启动我的用户会话时,/dev/kvm权限返回root用户和root组,我需要一次又一次地为我的组设置权限......

如何设置此权限并防止在我重新启动计算机时我的权限不再更改?

所以:Ubuntu 18.04.01

android kvm android-virtual-device android-studio

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

LiveData 或 DataBinding Observer

我在我的Android应用程序中使用MVVM,在视图模型我有很多观察员(从数据绑定)一样ObservableBooleanObservableField我看了,我可以使用LiveData/MutableLiveData,而不是这个观察家...有什么区别?我可以用LiveData/MutableLiveData?

例如:

代替:

val loading: ObservableBoolean = ObservableBoolean()
Run Code Online (Sandbox Code Playgroud)

经过:

val loading: MutableLiveData<Boolean> = MutableLiveData()
Run Code Online (Sandbox Code Playgroud)

android android-livedata

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

使用密封类时,MutableSet 不会防止重复内容

如果我使用MutableSetwith sealed class,则MutableSet接受所有重复的内容。

样本:

sealed class LoginSavedCommand {
    class Login(val email: String, val password: String) : LoginSavedCommand()
    class SaveData(val email: String, val password: String) : LoginSavedCommand()
}

fun main(args: Array<String>) {

    val mSet: MutableSet<LoginSavedCommand> = hashSetOf()

    mSet.add(LoginSavedCommand.Login("oba", "pass"))
    mSet.add(LoginSavedCommand.Login("faiii", "blabla"))

    if (mSet.add(LoginSavedCommand.Login("oba", "pass"))) {
        println("don't")
    } else {
        println("do")
    }
}
Run Code Online (Sandbox Code Playgroud)

我将相同的值传递给LoginSavedCommand.Login,但MutableSet继续接受添加相同的值(在示例中println打印“不”,并且我需要打印“做”,因为我需要使用此来防止重复内容selaed class

kotlin

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

Android 协程作业更改为 CompletableJob?

当我将我的项目协程更新到较新版本时,我所有具有启动范围的作业创建都失败了......

在 gradle 上:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
Run Code Online (Sandbox Code Playgroud)

错误:

Type mismatch: inferred type is Job but CompletableJob was expected
Run Code Online (Sandbox Code Playgroud)

代码:

var websiteCrawlerResultList: ArrayList<WebsiteCrawlerResult> = arrayListOf()
    var url: URL? = null
    private var urlList: MutableSet<String> = mutableSetOf()
    private var job = Job()
    private var scope = CoroutineScope(Dispatchers.Default+job)

    fun startCrawler() {
        job = scope.launch {
            crawlPageLinks(url)
            Log.d(TAG, "Finished ${url.toString()} crawling")
        }
    }
Run Code Online (Sandbox Code Playgroud)

job = scope.launch {Android Studio 返回类型不匹配错误时,他希望是CompletableJob,但我没有使用它,并且在旧版本中不存在。

android kotlin kotlin-coroutines

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

Robolectric 是单元测试还是集成测试?

我知道 Robolectric 官方网站上说这个框架用于单元测试,但在所有示例 robolectric 上都用于测试视图...例如:Robolectric 可用于检查 textview X 的文本是否为“dog”,可以检查按钮是否可点击...但这不是单元测试...它是集成测试,我也可以用浓缩咖啡做到这一点...

如果 robolectric 真的是单元测试,我可以用它来测试视图模型、存储库、扩展吗?

如果是用于单元测试,您能给我一个仅使用 Robolectric (无 Mockito)显示视图模型测试的示例吗?

android unit-testing robolectric

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

检查视图是否动画

我有一个扩展功能,可以让任何视图在单击时执行“缩放动画”,但此功能不检查视图是否正在设置动画。正因为如此,当用户多次点击(并且视图还没有完成动画)时,视图会缩放并增加视图的原始大小......

我需要防止这种情况。也许检查视图是否在动画,只有在视图没有动画时才动画

fun View.setOnClickWithScaleAnimListener(block: View.() -> Unit) {
    this.setOnClickListener { v ->
        v.animate()
            .scaleXBy(0.1f)
            .scaleYBy(0.1f)
            .setDuration(80)
            .withEndAction {
                v.animate()
                    .scaleXBy(-0.1f)
                    .scaleYBy(-0.1f)
                    .duration = 80
            }

        block(this)
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin

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

对齐密码切换图标

如何定位和对齐可绘制到右侧的密码开关TextInputEditText

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/passwordTextInputLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            style="@style/DefaultTextInputLayout"
            android:paddingStart="@dimen/activity_default_margin"
            android:paddingEnd="@dimen/activity_default_margin"
            app:passwordToggleEnabled="true"
            app:passwordToggleDrawable="@drawable/select_show_password"
            app:passwordToggleTint="#AFB5C0"
            app:errorEnabled="true" 
            app:layout_constraintBottom_toTopOf="@+id/rememberPasswordCheckBox"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"   
            app:layout_constraintTop_toBottomOf="@+id/emailTextInputLayout" >

        <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/passwordEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/login_password"
                android:textSize="16sp"
                android:inputType="textPassword" />

</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

我需要将密码开关定位在TextInputEditText图像上的右侧(红色箭头所指向的位置)上。

通过

android android-layout

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