小编tam*_*tom的帖子

Jetpack Compose NavHost 重组可组合多次

我发现可组合屏幕在 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

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

带有 Firebase 应用分发的 App Bundle

所以目前我们正在将 APK 导出到 Play 商店,我们正在使用Firebase 应用分发作为我们的测试轨道,但现在我们想开始使用 App bundles 而不是 APK 但是这里的问题 Firebase 应用分发不支持 App bundles,我想到了为测试轨道部署 APK,然后发布用于 Play 商店发布的应用程序包,但我认为这里存在风险,因为应用程序包未经测试并且可能包含无法发现的问题,我们的选择是将测试轨道迁移到内部在播放控制台中共享应用程序,有没有办法让 Firebase 应用程序分发支持 App Bundles 或任何其他选项?

android firebase android-app-bundle firebase-app-distribution

8
推荐指数
2
解决办法
2817
查看次数

是否可以在viewpager中将共享元素从片段转换为ViewPager

我有活动A有一个片段包含项目列表,
当我点击项目时,该项目包含ImageView 我启动包含ViewPager片段的活动B,每个片段内部都有一个包含图像的ViewPager,我想要做的是在项目列表中的第一个ImageView和图像的viewpager中显示的第一个图像之间进行共享元素转换 ActivityA

ActivityB

android android-animation android-fragments android-viewpager shared-element-transition

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

LifecycleRegistry的popParentState中的ArrayIndexOutOfBoundsException

我一直面临着这种奇怪的崩溃,当将架构组件添加到片段时,崩溃随机发生我无法通过直接场景重现它我有一个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

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

Kotlin For 循环从给定索引开始

我想从 Java 中的给定索引启动 For 循环,您可以轻松编写

for (int i = startingIndex; i < items.size(); i++) 
Run Code Online (Sandbox Code Playgroud)

如何在 Kotlin 中做到这一点?我知道如何在 Kotlin 中编写 for 循环

我的例子

我想迭代一个字符串数组,但起始位置是 3,而不是迭代一个Range迭代将在一个项目集合上

kotlin

7
推荐指数
2
解决办法
5527
查看次数

Android TextView 给出 IndexOutOfBoundsException TextLine.handleRun

我不久前就遇到了这个异常,我无法从堆栈跟踪中找到任何有用的信息,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)

android

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

findViewById()找不到自定义视图,但它存在于布局中

不知怎的,我的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)

java android

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