我有一个 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) 我遇到一个问题,当文本字段接收焦点时,软键盘在类型之间闪烁。
我有一个TextField
想要输入数字的地方,但是当接收View
焦点时,软键盘会在标准文本键盘和数字键盘之间滑动。
我创建了一个快速 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) 我正在尝试使用 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