首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将ClassCastException查看组$LayoutParams转换为ViewPager$LayoutParams

不能将ClassCastException查看组$LayoutParams转换为ViewPager$LayoutParams
EN

Stack Overflow用户
提问于 2013-09-02 09:01:01
回答 3查看 24.2K关注 0票数 17

我的初始代码行在重写的方法onGlobalLayout()中。

代码语言:javascript
复制
img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 100));

ClassCastException发生在重写的方法onGlobalLayout()中-

错误日志:

代码语言:javascript
复制
09-02 14:25:35.326: E/AndroidRuntime(5187): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.support.v4.view.ViewPager$LayoutParams
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1319)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.view.View.measure(View.java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.view.View.measure(View.java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
09-02 14:25:35.326: E/AndroidRuntime(5187):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)

当我执行以下操作以解决上述错误时,如其他帖子所示:

代码语言:javascript
复制
img.setLayoutParams(new ViewPager.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, 100));

然后,我得到编译时错误:

代码语言:javascript
复制
The constructor ViewPager.LayoutParams(int, int) is undefined

xml中的ViewPager定义如下:

代码语言:javascript
复制
<android.support.v4.view.ViewPager
 android:id="@+id/HView"
 android:layout_width="560dp"
 android:layout_height="255dp"
 android:layout_centerHorizontal="true"
 android:layout_marginLeft="160sp"
 android:layout_marginTop="110sp"
 android:layout_marginBottom="80sp">
 </android.support.v4.view.ViewPager>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-02 09:15:19

您的图像已经有布局参数。与其用新对象替换它们(在本例中是错误类型的对象,ViewPager希望它们是ViewPager.LayoutParams),您可以修改现有的布局参数,如下所示:

代码语言:javascript
复制
ViewGroup.LayoutParams params = img.getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
params.height = 100;
img.requestLayout();

注意,无条件地请求onGlobalLayout()中的重新布局可能是个坏主意,会导致无限的布局传递。我自己还没有核实是否是这样的。

票数 30
EN

Stack Overflow用户

发布于 2013-09-02 09:05:46

这样做

代码语言:javascript
复制
img.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100));

更新

代码语言:javascript
复制
 LayoutParams params = img.getLayoutParams();
         params.width = LayoutParams.MATCH_PARENT;
         params.height = 100;
         img.setLayoutParams(params);
票数 0
EN

Stack Overflow用户

发布于 2013-09-02 09:39:29

您应该确保您使用的LayoutParam类来自正确的父布局类。您需要将LayoutParams的ViewGroup设置为ViewPager所处的位置,作为需要知道分配给子视图的大小的View的父级。例如,在您的示例中,ViewGroup是一个RelativeLayout,您需要使用RelativeLayout.LayoutParams类。

您可以尝试如下:

代码语言:javascript
复制
img.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 100));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18569267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档