gpt4 book ai didi

android - 在 Gridview 中使用 Frame/RelativeLayout 时出错

转载 作者:行者123 更新时间:2023-11-30 04:14:34 25 4
gpt4 key购买 nike

我正在创建一个自定义 Gridview,每个单元格都由一个包含的布局表示

  • 1) 自定义 RatingBar
  • 2) ImageView

  • 我在 Adaptor 的 getView() 中给它们充气。

    它工作正常是所说的布局是线性的。但是如果我用框架/相对布局替换它,它会在 Logcat 中崩溃。
    04-20 18:19:16.921: E/AndroidRuntime(24111): FATAL EXCEPTION: main
    04-20 18:19:16.921: E/AndroidRuntime(24111): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.RelativeLayout$DependencyGraph.findRoots(RelativeLayout.java:1303)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.RelativeLayout$DependencyGraph.getSortedViews(RelativeLayout.java:1250)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.RelativeLayout.sortChildren(RelativeLayout.java:281)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:303)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.View.measure(View.java:8313)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.GridView.onMeasure(GridView.java:950)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.View.measure(View.java:8313)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.View.measure(View.java:8313)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.View.measure(View.java:8313)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.os.Handler.dispatchMessage(Handler.java:99)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.os.Looper.loop(Looper.java:123)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at android.app.ActivityThread.main(ActivityThread.java:3683)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at java.lang.reflect.Method.invokeNative(Native Method)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at java.lang.reflect.Method.invoke(Method.java:507)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    04-20 18:19:16.921: E/AndroidRuntime(24111): at dalvik.system.NativeStart.main(Native Method)

    最佳答案

    所有布局类(LinearLayout、RelativeLayout 等)都扩展 ViewGroup。

    ViewGroup 类有两个静态内部类:LayoutParams 和 MarginLayoutParams。而 ViewGroup.MarginLayoutParams 实际上扩展了 ViewGroup.LayoutParams。

    有时布局类需要额外的布局信息才能与 subview 相关联。为此,他们定义了内部静态 LayoutParams 类。例如,LinearLayout 有:

    public class LinearLayout extends ViewGroup {
    ...
    public static class LayoutParams extends ViewGroup.MarginLayoutParams {
    ...
    }
    }

    相对布局也一样:
    public class RelativeLayout extends ViewGroup {
    ...
    public static class LayoutParams extends ViewGroup.MarginLayoutParams {
    ...
    }
    }

    但是 LinearLayout.LayoutParams 和 RelativeLayout.LayoutParams 是完全不同的独立类。它们存储有关 subview 的不同附加信息。

    例如,LinearLayout.LayoutParams 可以将权重值与每个 View 相关联,而 RelativeLayout.LayoutParams 不能。与 RelativeLayout.LayoutParams 相同:它可以将上面、下面、alightWithParent 等值与每个 View 相关联。而 LinearLayout.LayoutParams 根本没有这些能力。

    所以一般来说,你必须使用封闭布局中的 LayoutParams 来使你的 View 正确定位和渲染。但请注意,所有 LayoutParams 都有相同的父类 ViewGroup.LayoutParams。如果您只使用在该类中定义的功能(例如在您的情况下为 WRAP_CONTENT 和 FILL_PARENT),您可以获得工作代码,即使错误的 LayoutParams 类用于指定布局参数。

    关于android - 在 Gridview 中使用 Frame/RelativeLayout 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10246690/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com