我有一个具有一个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()时,它可以正常工作。
答案 0 :(得分:1)
方法getLayoutParams
返回ViewGroup.LayoutParams
。这有许多子类,包括RelativeLayout.LayoutParams
。您的View
v
必须返回错误的类型。
如果您需要使用leftMargin
等,则应尝试将RelativeLayout.LayoutParams
替换为ViewGroup.MarginLayoutParams
。我无法确定它是否有效,因为我不知道v
的类。