我发现可组合屏幕在 Navhost 导航期间多次重新组合,以下示例显示了我如何将导航与日志集成以识别函数被调用的次数,
internal sealed class Screen(val route: String) {
object Splash : Screen("splash")
object Login : Screen("login")
object Credentials : Screen("credentials/{type}") {
fun createRoute(type: String) = "credentials/$type"
}
}
@Composable
fun HostNavGraph(
modifier: Modifier = Modifier,
startDestination: String = Splash.route,
) {
val navController = rememberNavController()
val vm: CredentialsViewModel = getViewModel()
NavHost(navController = navController, startDestination = startDestination, modifier = modifier) {
composable(route = Splash.route) {
Log.e("composable", " Splash")
SplashScreen(openLogin = {
navController.navigate(Login.route)
}, openRegistration = { type ->
navController.navigate(Credentials.createRoute(type)) …Run Code Online (Sandbox Code Playgroud) android android-jetpack-navigation android-jetpack-compose jetpack-compose-navigation compose-recomposition
所以目前我们正在将 APK 导出到 Play 商店,我们正在使用Firebase 应用分发作为我们的测试轨道,但现在我们想开始使用 App bundles 而不是 APK 但是这里的问题 Firebase 应用分发不支持 App bundles,我想到了为测试轨道部署 APK,然后发布用于 Play 商店发布的应用程序包,但我认为这里存在风险,因为应用程序包未经测试并且可能包含无法发现的问题,我们的选择是将测试轨道迁移到内部在播放控制台中共享应用程序,有没有办法让 Firebase 应用程序分发支持 App Bundles 或任何其他选项?
android firebase android-app-bundle firebase-app-distribution
我有活动A有一个片段包含项目列表,
当我点击项目时,该项目包含ImageView 我启动包含ViewPager片段的活动B,每个片段内部都有一个包含图像的ViewPager,我想要做的是在项目列表中的第一个ImageView和图像的viewpager中显示的第一个图像之间进行共享元素转换

android android-animation android-fragments android-viewpager shared-element-transition
我一直面临着这种奇怪的崩溃,当将架构组件添加到片段时,崩溃随机发生我无法通过直接场景重现它我有一个navigation bottom bar控制5个片段,其中一个片段有一个实现LifecycleObserver
崩溃日志的演示者:
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
at java.util.ArrayList.remove(ArrayList.java:405)
at android.arch.lifecycle.LifecycleRegistry.popParentState(LifecycleRegistry.java:194)
at android.arch.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:293)
at android.arch.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:332)
at android.arch.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:137)
at android.arch.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:123)
at android.support.v4.app.Fragment.performStart(Fragment.java:2380)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1467)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)
更换该片段后发生崩溃,代码跟踪到我的代码从这里开始
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.flMain, fragment, tabModel.getName())
.addToBackStack(BACK_STACK_ROOT_TAG)
.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
这里有什么可能的问题?
android android-lifecycle android-fragments android-architecture-components android-jetpack
我想从 Java 中的给定索引启动 For 循环,您可以轻松编写
for (int i = startingIndex; i < items.size(); i++)
Run Code Online (Sandbox Code Playgroud)
如何在 Kotlin 中做到这一点?我知道如何在 Kotlin 中编写 for 循环
我的例子
我想迭代一个字符串数组,但起始位置是 3,而不是迭代一个Range迭代将在一个项目集合上
我不久前就遇到了这个异常,我无法从堆栈跟踪中找到任何有用的信息,Crashlytics 报告它发生在 Android 8 和 9 上
这是堆栈跟踪:
Fatal Exception: java.lang.IndexOutOfBoundsException: measureLimit (54) is out of start (55) and limit (54) bounds
at android.text.TextLine.handleRun(TextLine.java:989)
at android.text.TextLine.measureRun(TextLine.java:500)
at android.text.TextLine.measure(TextLine.java:337)
at android.text.TextLine.metrics(TextLine.java:272)
at android.text.Layout.getLineExtent(Layout.java:1370)
at android.text.Layout.drawText(Layout.java:519)
at android.text.Layout.draw(Layout.java:292)
at android.widget.TextView.onDraw(TextView.java:7765)
at android.view.View.draw(View.java:20370)
at android.view.View.updateDisplayListIfDirty(View.java:19315)
at android.view.View.draw(View.java:20093)
at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
at android.view.View.updateDisplayListIfDirty(View.java:19306)
at android.view.View.draw(View.java:20093)
at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
at android.view.View.draw(View.java:20373)
at android.support.v4.widget.NestedScrollView.draw(NestedScrollView.java:1888)
at android.view.View.updateDisplayListIfDirty(View.java:19315)
at android.view.View.draw(View.java:20093)
at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1246)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
at android.view.View.updateDisplayListIfDirty(View.java:19306)
at android.view.View.draw(View.java:20093)
at android.view.ViewGroup.drawChild(ViewGroup.java:4421)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4207)
at android.view.View.updateDisplayListIfDirty(View.java:19306) …Run Code Online (Sandbox Code Playgroud) 不知怎的,我的acitivity_main.xml有视图BottomSelectElement(自定义视图),但我在活动中找不到它,但我可以找到其他任何东西.
activity_main.xml(删除不必要的部分)
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="it.bachmann.studytimer.ui.MainActivity">
<!-- THIS IS THE VIEW I CANNOT FIND IN THE MainActivity.java (BottomSelectElement) -->
<it.bachmann.studytimer.ui.elements.BottomSelectElement
android:id="@+id/customBottomSelect"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="bottom|center" />
<com.github.clans.fab.FloatingActionMenu
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
我的自定义视图类,在activity_main.xml中完美显示
public class BottomSelectElement extends ConstraintLayout {
private Spinner spinner;
public BottomSelectElement(Context context) {
super(context);
init();
}
public BottomSelectElement(Context context, AttributeSet attributeSet) {
super(context);
init();
}
private void init() {
inflate(getContext(), R.layout.bottom_select_element, this);
spinner = findViewById(R.id.spinner);
List<String> categories = Arrays.asList("foo", "bar", "baz");
ArrayAdapter adapter = …Run Code Online (Sandbox Code Playgroud)