【问题标题】:CodenameOne Floating Action Button binding errorCodenameOne 浮动操作按钮绑定错误
【发布时间】:2020-12-29 21:35:38
【问题描述】:

我的 CodenameOne 应用有一个带有特殊尺寸限制的主/细节布局。 还有一个“加号”按钮,允许创建新项目。

在主窗体中:

FloatingActionButton fab=FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
...

if(isTablet() && !isPortrait())
    {
        mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int)(leftContainerRatio*100)),masterContainer)
                .add( mainEditingContainer);
        fab.bindFabToContainer(masterContainer); //error here
    } else {
        mainForm.add(masterContainer);
        fab.bindFabToContainer(masterContainer);
    }

运行时我得到:

 java.lang.IllegalArgumentException: Component is already contained in Container: Container[x=0 y=20 width=2048 height=1514 name=null, layout = TableLayout, scrollableX = false, scrollableY = false, components = [masterContainer, Container]]
at com.codename1.ui.Container.insertComponentAtImpl(Container.java:927)
at com.codename1.ui.Container.insertComponentAt(Container.java:918)
at com.codename1.ui.Container.addComponent(Container.java:840)
at com.codename1.ui.Container.encloseIn(Container.java:250)
at com.codename1.ui.layouts.LayeredLayout.encloseIn(LayeredLayout.java:1099)
at com.codename1.components.FloatingActionButton.bindFabToContainer(FloatingActionButton.java:314)
at com.codename1.components.FloatingActionButton.bindFabToContainer(FloatingActionButton.java:286)
at com.myapp.app.MyApp.start(MyApp.java:186)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.codename1.impl.javase.Executor$3$1.run(Executor.java:258)
at com.codename1.ui.Display.processSerialCalls(Display.java:1331)
at com.codename1.ui.Display.mainEDTLoop(Display.java:1125)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

但没有在任何地方添加或绑定 FAB,其他地方显示在代码 sn-p 中。

如果绑定方法被移除,则不会出现任何按钮。

(应用程序正在模拟器中运行)

有什么问题?

【问题讨论】:

    标签: java codenameone floating-action-button master-detail


    【解决方案1】:

    查看此内容以了解发生了什么:How can I reposition the Floating Button in Codenameone?

    它的要点是,当您在非表单容器上使用FloatingActionButton 时,您需要添加其结果。因为你给的容器现在已经包装好了。

    所以你的代码应该是:

    if(isTablet() && !isPortrait()) {
       mainForm.add(tl.cc().hp(100).wp((int)(leftContainerRatio*100)), 
                            fab.bindFabToContainer(MasterContainer))
               .add( mainEditingContainer);
    } else {
        mainForm.add(fab.bindFabToContainer(MasterContainer));
    }
    

    【讨论】:

    • 它可以工作,但在纵向模式下我有 mainForm.add(fab.bindFabToContainer(masterContainer));并因此发出相同的错误(它在启动时,而不是旋转)
    • 您是否也将我的更改应用于 else 语句?
    • MasterContainer 是否已添加到此行之前的某个其他位置的某些内容中。如果用户已经有父级并且您尝试添加它,则会引发此异常。您可以使用调试器单步执行代码并查看父属性
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多