为了账号安全,请及时绑定邮箱和手机立即绑定

关于在使用中遇到的MarginLayoutParams的强制转换异常

如果你也跟我一样遇到了这个问题,而且跟老师的FlowLayout的代码完全是一样的,请注意:

在MainActivity中。flowLayout.addView(View);是会报出这个问题,好像是如果我们不手动指定MarginLayoutParams,系统会自动会为我们的子View设置了 ViewGroup.Layoutparams(虽然MarginLayoutParams是他的子类),然后报出了强制转换的异常。

希望我的发现,能解决你的问题

正在回答

6 回答

你好,多谢你的分享。

0 回复 有任何疑惑可以回复我~

尝试了一下,可以这样解决:“MarinLayoutParams无法正确生成的问题”:

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   mFlowLayout = (FlowLayout) findViewById(R.id.id_flowlayout);
   initData(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

public void initData(int width, int height){
   for (int i = 0; i < mVals.length; i ++){
       Button button = new Button(this);
      ViewGroup.MarginLayoutParams layoutParams = new ViewGroup.MarginLayoutParams(width, height);
       button.setText(mVals[i]);
      // button.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
       //button.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
       mFlowLayout.addView(button,layoutParams);
   }
}

*用参数的方式传递;


0 回复 有任何疑惑可以回复我~

怎么解决的啊?

0 回复 有任何疑惑可以回复我~

覆写generateLayoutParams这个方法即可。

0 回复 有任何疑惑可以回复我~

请问这个问题怎么解决?

0 回复 有任何疑惑可以回复我~

如果子view是inflate得来的,应该调用有3个参数那个方法:inflate(int resource, ViewGroup root, boolean attachToRoot),这样就可以得到root提供的布局参数(调用root的generateDefaultLayoutParams方法)

552650e20001ade805000246.jpg

--------------------------------------------------------------------------------------------------

552650d70001661804930226.jpg

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
打造Android中的流式布局和热门标签
  • 参与学习       30489    人
  • 解答问题       56    个

酷炫的热门标签到底是怎么实现的呢,本教程会给你答案

进入课程

关于在使用中遇到的MarginLayoutParams的强制转换异常

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信