如何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
模拟位置在 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) 当我尝试运行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应用程序中使用MVVM,在视图模型我有很多观察员(从数据绑定)一样ObservableBoolean,ObservableField我看了,我可以使用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) 如果我使用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)
当我将我的项目协程更新到较新版本时,我所有具有启动范围的作业创建都失败了......
在 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,但我没有使用它,并且在旧版本中不存在。
我知道 Robolectric 官方网站上说这个框架用于单元测试,但在所有示例 robolectric 上都用于测试视图...例如:Robolectric 可用于检查 textview X 的文本是否为“dog”,可以检查按钮是否可点击...但这不是单元测试...它是集成测试,我也可以用浓缩咖啡做到这一点...
如果 robolectric 真的是单元测试,我可以用它来测试视图模型、存储库、扩展吗?
如果是用于单元测试,您能给我一个仅使用 Robolectric (无 Mockito)显示视图模型测试的示例吗?
我有一个扩展功能,可以让任何视图在单击时执行“缩放动画”,但此功能不检查视图是否正在设置动画。正因为如此,当用户多次点击(并且视图还没有完成动画)时,视图会缩放并增加视图的原始大小......
我需要防止这种情况。也许检查视图是否在动画,只有在视图没有动画时才动画
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) 如何定位和对齐可绘制到右侧的密码开关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图像上的右侧(红色箭头所指向的位置)上。