小编Ind*_*ana的帖子

为什么当我导航回片段时调用 onChanged?

我有一个 ViewModel 处理我的业务逻辑,我正在使用 Koin 将其注入我的活动和我的每个片段。然而,在我从片段 A - 片段 B 导航并导航回片段 A 后,我的观察者再次被触发。为什么会发生这种情况,当我返回时如何停止触发 onChanged?

我尝试将“this”和“viewLifecycleOwner”都设置为 LiveData 的 LifecycleOwner。

我还尝试将 observable 移动到 onCreate、onActivityCreated 和 onViewCreated

我的视图模型:

class MyViewModel : ViewModel() {

    private val _myData = MutableLiveData<Data>()
    val myData = LiveData<Data>()
        get() = _myData

    fun doSomething() {
        ... // some code
        _myData.postValue(myResult)
}
Run Code Online (Sandbox Code Playgroud)

我的活动:

class Activity : BaseActivity() {

    private val viewModel by viewModel<MyViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        setSupportActionBar(main_toolbar)

        subscribeUI()
    }

    private fun subscribeUI() {
        myViewModel.isLoading.observe(this, Observer {
            toggleProgress(it)
        }) …
Run Code Online (Sandbox Code Playgroud)

android android-livedata android-architecture-components

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

当输入获得焦点时,键盘在键盘类型之间闪烁

我遇到一个问题,当文本字段接收焦点时,软键盘在类型之间闪烁。

我有一个TextField想要输入数字的地方,但是当接收View焦点时,软键盘会在标准文本键盘和数字键盘之间滑动。

我创建了一个快速 gif 来演示:

gif 演示

我怀疑在重组发生时我做错了什么,但我看不出哪里可能导致这种情况。

下面是演示实现的代码:

@Composable
fun PinInput(focusManager: FocusManager) {
    Card(
        modifier = Modifier.size(60.dp, 80.dp),
        elevation = 0.dp,
        backgroundColor = ColorSurface,
        border = BorderStroke(2.dp, ColorLightBorder)
    ) {
        EditableInput(
            textStyle = Typography.h1.copy(
                textAlign = TextAlign.Center,
                fontSize = Dimens.TextSizeGiant
            ),
            onTextChange = { value ->
                if (value.isNotEmpty()) focusManager.moveFocus(Right)
                else focusManager.moveFocus(Left)
            },
            maxLength = 1,
            keyboardOptions = KeyboardOptions(
                keyboardType = KeyboardType.NumberPassword,
                imeAction = ImeAction.Next
            ),
            keyboardActions = KeyboardActions(onNext = { focusManager.moveFocus(Right) })
        )
    }
}
Run Code Online (Sandbox Code Playgroud)
@Composable
fun …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

5
推荐指数
0
解决办法
804
查看次数

如何更改工具栏中图标的颜色?

我正在尝试使用 Material Components 库在我的应用程序中实现 Material Design。我希望我的图标和后退箭头为白色,但我无法更改它们的颜色。我的代码哪里出错了?

我尝试在我的样式 'NITraffic.Toolbar' 中添加以下属性,但没有效果:

<item name="subtitleTextColor">@color/color_on_primary</item>
        <item name="android:colorControlNormal">@color/color_on_primary</item>
        <item name="android:textColorSecondary">@color/color_on_primary</item>
Run Code Online (Sandbox Code Playgroud)

我在 theme.xml 中的顶级主题:

    <style name="NITrafficTheme.DayNight" parent="Base.NITrafficTheme"/>

    <style name="Base.NITrafficTheme" parent="Base.MaterialThemeBuilder">

        <!--Material color attributes -->
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryVariant">@color/color_primary_variant</item>
        <item name="colorSecondary">@color/color_secondary</item>
        <item name="colorSecondaryVariant">@color/color_secondary_variant</item>

        <item name="android:colorBackground">@color/color_background</item>
        <item name="colorSurface">@color/color_surface</item>
        <item name="colorError">@color/color_error</item>

        <item name="colorOnPrimary">@color/color_on_primary</item>
        <item name="colorOnSecondary">@color/color_on_secondary</item>
        <item name="colorOnBackground">@color/color_on_background</item>
        <item name="colorOnSurface">@color/color_on_surface</item>
        <item name="colorOnError">@color/color_on_error</item>

....

        <!--Component styles-->
        <item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.Dialog.Alert</item>
        <item name="bottomSheetDialogTheme">@style/NITraffic.BottomSheetDialog</item>
        <item name="toolbarStyle">@style/NITraffic.Toolbar</item>
        <item name="bottomNavigationStyle">@style/NITraffic.BottomNavigation</item>
    </style>

    <style name="Base.MaterialThemeBuilder" parent="Theme.MaterialComponents.DayNight.NoActionBar">

        <item name="android:statusBarColor">?colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:ignore="NewApi">false</item>
        <item name="android:navigationBarColor">?colorPrimary</item>
        <item name="android:windowLightNavigationBar" tools:ignore="NewApi">false</item>
        <item name="android:navigationBarDividerColor" tools:ignore="NewApi">?colorPrimary</item> …
Run Code Online (Sandbox Code Playgroud)

xml android android-theme android-styles material-components-android

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