FrameLayout.getLayoutParams导致应用关闭

时间:2016-05-21 10:03:07

标签: java android android-framelayout

我正在将图片加载到ImageViewImageView包含在FrameLayout中。加载图像按预期工作,但现在我想设置FrameLayout的边距以匹配加载图像的大小,因为我将其他视图添加到FrameLayout作为图像的叠加层。

为此,我在实用程序类中创建了一个静态方法,该方法与包含FrameLayoutImageView的类不同。在utilityclass中运行该方法时,它会从以下代码中显示的行中转出应用,该代码会尝试获取LayoutParams的{​​{1}}。

由于我没有收到错误消息,我发现很难理解错误。任何人都可以指出我正确的方向。

将处理图像加载的代码作为结果的活动

FrameLayout

这段代码是调用的新方法,导致崩溃\ app闭包。

case REQUEST_OPEN_GALLERY:
    if (resultCode == RESULT_OK && null != data) {
        getSelectedFileFromGallery(data);

         // This block is the new code to apply the layoutParams
          FrameLayout fLayout = (FrameLayout) findViewById(R.id.image_Layout);
          ImageView iView = (ImageView) findViewById(R.id.image_View);
          Utils.addMarginsToImageContainer(fLayout, iView);
          //End of the new block

          toggleViewStatus(ENABLE_OVERLAY_VIEWS); //Enable the text and overlay control
     }
break;

我不确定是否有人需要任何额外的代码部分,但如果是,请告诉我,我会发布它们。非常感谢任何帮助。

更新 - 我刚刚意识到运行应用程序而不是在手机上进行调试会引发错误。错误是

  

发送失败结果ResultInfo {who = null,request = 2,result = -1,   data = Intent {dat = content:// media / external / images / media / 3377 flg = 0x1   活动myActivity java.lang.ClassCastException:   android.widget.RelativeLayout $ LayoutParams无法强制转换为   android.widget.FrameLayout $的LayoutParams

考虑到这一点,可能需要注意framelayout包含在RelativeLayout中。但是,为什么系统将framelayout参数转换为相对布局的参数,我还不明白。

1 个答案:

答案 0 :(得分:0)

我很确定在此之前我已经看过实际的错误消息(添加为原始帖子的编辑)。我通过更改行

解决了这个问题
FrameLayout.LayoutParams fLayoutLayoutParams = (FrameLayout.LayoutParams) fLayout.getLayoutParams();

使用RelativeLayout Params代替,例如

    RelativeLayout.LayoutParams fLayoutLayoutParams = (RelativeLayout.LayoutParams) fLayout.getLayoutParams();

至于为什么你需要顶级父视图的布局参数而不是我实际上试图影响的视图的布局参数的原因。我认为这个问题已经得到了更好的回答,在这个阶段我并不完全理解。