gpt4 book ai didi

java - 为什么在某些事件中调用 getLayoutParams() 会抛出异常?例如,onSaveInstanceState

转载 作者:行者123 更新时间:2023-12-01 11:10:46 24 4
gpt4 key购买 nike

我有一个带有一个 View 对象(一个简单的位图)的RelativeLayout。为了兼容性,我使用 getLayoutParams() 和 setLayoutParams() 来移动它。

但是,当从 onSaveInstanceState() 事件内部调用 getLayoutParams() 时(例如,因为屏幕旋转),程序将中止并显示消息“应用程序...已意外停止。请重试”。代码:

@Override
protected void onSaveInstanceState(Bundle outState) {
View v=findViewById(R.id.MyView);
RelativeLayout.LayoutParams lp;
lp=(RelativeLayout.LayoutParams)v.getLayoutParams(); // **Exception!!!**

// ... (do something with lp.leftMargin, etc)

super.onSaveInstanceState(outState);
}

这些是相关异常的第一行:

Caused by: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams
at com.example.Main.onSaveInstanceState(Main.java:85)
at android.app.Activity.performSaveInstanceState(Activity.java:1037)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1181)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2336)

同样的情况发生在 onCreate() 和 onPause() 事件中。

当我在其他函数(例如计时器事件函数)中使用 getLayoutParams() 时,它工作正常。

最佳答案

方法getLayoutParams返回一个ViewGroup.LayoutParams。它有很多很多子类,包括RelativeLayout.LayoutParams。您的 View v 必须返回错误的类型。

如果您需要使用leftMargin等,您应该尝试用ViewGroup.MarginLayoutParams替换RelativeLayout.LayoutParams。我不确定它是否有效,因为我不知道 v 的类。

关于java - 为什么在某些事件中调用 getLayoutParams() 会抛出异常?例如,onSaveInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32417762/

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