我正在BottomNavigationView
与导航组件一起使用。当显示片段不是根片段时,选项卡图标不会更新(选择)。
示例:
当我在带有片段 A(也是根片段)的Tab Home和带有片段 B(也是根片段)的Tab Star之间切换时,它工作正常。
但是,当我从Tab Home导航到另一个片段(例如片段 A2),然后点击Tab Star并再次返回Tab Home时,仍然在 中选择Tab StarBottomNavigationView
。
版本运行良好2.4.0-alpha05
,当我将其更新到2.5.0-alpha01
.
构建.gradle(应用程序)
implementation "androidx.navigation:navigation-fragment-ktx:2.5.0-alpha01"
implementation "androidx.navigation:navigation-ui-ktx:2.5.0-alpha01"
implementation "androidx.navigation:navigation-dynamic-features-fragment:2.5.0-alpha01"
Run Code Online (Sandbox Code Playgroud)
构建.gradle(根)
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.5.0-alpha01"
Run Code Online (Sandbox Code Playgroud)
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/graph"
app:startDestination="@id/fragmentA">
<fragment
android:id="@+id/fragmentA"
android:name="ui.test.FragmentA"
tools:layout="@layout/fragment_test"
android:label="FragmentA" >
<action
android:id="@+id/action_fragmentA_to_fragmentA2"
app:destination="@id/fragmentA2" />
</fragment>
<fragment
android:id="@+id/fragmentA2"
android:name="ui.test.FragmentA2"
tools:layout="@layout/fragment_test"
android:label="FragmentA2" />
<fragment
android:id="@+id/fragmentB"
android:name="ui.test.FragmentB"
tools:layout="@layout/fragment_test"
android:label="FragmentB" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用BasicTextField
.
默认文本颜色是黑色,我找不到任何更改文本颜色的选项。
我还需要更改文本大小、字体和其他属性。
@Composable
fun MyBasicTextField(){
var text by remember { mutableStateOf("Hello") }
BasicTextField(
value = text,
onValueChange = {
text = it
},
decorationBox = { ... },
modifier = Modifier
.fillMaxWidth()
.background(Color.DarkGray, CircleShape)
.padding(10.dp)
)
}
Run Code Online (Sandbox Code Playgroud)
如果这不可能通过BasicTextField
,是否有其他方法来创建类似的视图?
我已经尝试过TextField
,但存在几个问题,例如删除标签、高度、背景......
尝试在我的项目中实现Firebase.
Gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.ghaleh.myapplication"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-media-compat:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso- core:3.0.2'
implementation 'com.google.firebase:firebase-messaging:15.0.2'
}
apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
All gms/firebase libraries must use the exact same version specification (mixing versions can lead to runtime crashes). …
Run Code Online (Sandbox Code Playgroud) 我正在使用 ViewPager2、Kotlin 和 AndroidX。当适配器不在索引 0 处并且我更改适配器列表并将当前项设置为索引 0 时,将引发异常。
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.widget.ViewPager2.updateCurrentItem(ViewPager2.java:538)
at androidx.viewpager2.widget.ViewPager2$4.onAnimationsFinished(ViewPager2.java:518)
at androidx.recyclerview.widget.RecyclerView$ItemAnimator.isRunning(RecyclerView.java:13244)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:515)
at android.view.View.layout(View.java:15596)
Run Code Online (Sandbox Code Playgroud)
在 ViewPager2 的第 537 行中有一个 if 导致异常:
// Extra checks verifying assumptions
// TODO: remove after testing
View snapView1 = mPagerSnapHelper.findSnapView(mLayoutManager);
View snapView2 = mLayoutManager.findViewByPosition(snapPosition);
if (snapView1 != snapView2) {
throw new IllegalStateException("Design assumption violated.");
}
Run Code Online (Sandbox Code Playgroud)
这是我更新适配器列表的方式:
adapter.list = newList
adapter.notifyDataSetChanged()
viewpager.setCurrentItem(0, true)
Run Code Online (Sandbox Code Playgroud)
它仅在smoothScroll
设置为时发生true
我错过了什么?
编辑:
我使用androidx.viewpager2.widget.ViewPager2
可用com.google.android.material:material:1.1.0-alpha08
我正在寻找观察数据的最佳方法ViewModel
。
我正在使用 MVVM + 数据绑定。
存储库:
private val data = MutableLiveData<String>()
suspend fun getData(): LiveData<String> {
return withContext(IO) {
val response = apiRequest { api.getData() }
data.postValue(response)
data
}
}
Run Code Online (Sandbox Code Playgroud)
它从服务器请求数据并返回实时数据。ViewModel必须观察数据的变化。
视图模型:
suspend fun getData() {
val data = repository.getData()
MediatorLiveData<String>().apply {
addSource(data) {
gotData(it)
removeSource(data)
}
observeForever { }
}
}
private fun gotData(data: String) {
//use data
}
Run Code Online (Sandbox Code Playgroud)
ViewModel 使用来观察来自存储库MediatorLiveData
的更改。LiveData
我已将数据添加为源以观察更改并在触发后将其删除,以防止在多次获取数据时多次触发事件。并且必须有一个假观察者来MediatorLiveData
触发 onChange 方法MediatorLiveData
。
假设我只需要数据来隐藏/显示视图(或者甚至将数据填充到我的 recyclerview 的适配器)。然后我只需调用下面的代码并使用 Observable 和 DataBinding,如下所示: …
我正在开发一个 Kotlin 多平台项目。我正在尝试使用计时器和倒计时器,但我无法访问kotlin.concurrent.fixedRateTimer
或import kotlin.concurrent.timer
在commonMain
模块中。
这是根build.gradle
:
plugins {
kotlin("multiplatform")
id("com.android.library")
id("kotlin-android-extensions")
}
// ...
kotlin {
//...
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.4.10")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.4.10")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9")
//...
}
}
//...
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在那里使用这些方法。如果没有,我如何在模块中编写计时器和倒计时器commonMain
?
我尝试使用Coroutines
来实现相同的功能但失败了,因为它们不精确:
fun doAfter(delay: Long, action: () -> (Unit)) = launch {
delay(delay)
action.invoke()
}
fun countdown(time: Long, tick: Long, onTick: () -> (Unit), onFinish: () -> (Unit)) = launch { …
Run Code Online (Sandbox Code Playgroud) 我正在使用 RecyclerView 到 ViewPager 共享元素转换。问题是当viewpager被分页到另一个图像时,返回到recyclerview后,第一个动画的imageview是白色的。
启动viewpager:
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction()
.setReorderingAllowed(true)
.addSharedElement(view, name)
.hide(recyclerFragment)
.add(R.id.main_frameLayout, viewpagerFragment, tag)
.commit();
Run Code Online (Sandbox Code Playgroud)
回到 recyclerview 片段:
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction()
.setReorderingAllowed(true)
.addSharedElement(view, name)
.remove(viewpagerFragment)
.show(recyclerFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,我知道位置并且我正在正确设置过渡名称。