为什么在某些事件中调用 getLayoutParams() 会抛出异常?例如,onSaveInstanceState
Why does getLayoutParams() throw exception when called inside some events? e.g., onSaveInstanceState
我有一个 RelativeLayout 和一个 View 对象(一个简单的位图)。为了兼容性,我使用 getLayoutParams() 和 setLayoutParams() 来移动它。
但是当从 onSaveInstanceState() 事件内部调用 getLayoutParams() 时(例如,因为屏幕旋转),程序中止并显示消息 "The application ... has stopped unexpectedly. Please try again"。代码:
@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
returns一个ViewGroup.LayoutParams
。这个有很多很多子classes,包括RelativeLayout.LayoutParams
。您的 View
v
一定返回了错误的类型。
如果您需要使用 leftMargin
等,您应该尝试将 RelativeLayout.LayoutParams
替换为 ViewGroup.MarginLayoutParams
。我不确定它是否有效,因为我不知道 v
的 class。
我有一个 RelativeLayout 和一个 View 对象(一个简单的位图)。为了兼容性,我使用 getLayoutParams() 和 setLayoutParams() 来移动它。
但是当从 onSaveInstanceState() 事件内部调用 getLayoutParams() 时(例如,因为屏幕旋转),程序中止并显示消息 "The application ... has stopped unexpectedly. Please try again"。代码:
@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
returns一个ViewGroup.LayoutParams
。这个有很多很多子classes,包括RelativeLayout.LayoutParams
。您的 View
v
一定返回了错误的类型。
如果您需要使用 leftMargin
等,您应该尝试将 RelativeLayout.LayoutParams
替换为 ViewGroup.MarginLayoutParams
。我不确定它是否有效,因为我不知道 v
的 class。