为RelativeLayout中的膨胀视图设置参数,但获取classcastexception

时间:2013-11-12 18:10:13

标签: android android-layout

您好我正在尝试使用inflater以编程方式添加布局(这是一个简单的TextView)。膨胀视图的父级是ScrollView中的RelativeLayout。我的问题是我正在尝试使用params.addRule和view.setLayoutParams()将新视图放在其标题下(在RelativeLayout中),但是我得到了一个转发异常:11-12 13:06:57.360: E/AndroidRuntime(10965): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams,甚至虽然视图的父级显然是RelativeLayout。有什么想法吗?

我在想它是因为RelativeLayout嵌套在scrollview中,但是我不明白为什么它会这样做,因为我添加的视图的直接父级是RelativeLayout。

    _innerLayout = (RelativeLayout) findViewById(R.id.innerRelativeLayout);
    LayoutInflater inflater = (LayoutInflater)this.getLayoutInflater();

    View view = inflater.inflate(R.layout.comments, _innerLayout);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.BELOW, R.id.commentsHeader);
    view.setLayoutParams(params);

1 个答案:

答案 0 :(得分:5)

如果使用非View作为inflate()方法的根,则返回的View实际上将是作为方法中的根传递的View。因此,在您的情况下,view_innerLayout RelativeLayout,其父作为ScrollView,是FrameLayout的扩展名(将解释{ {1}})。

因此要么使用当前的inflate方法,要在返回的视图中查找视图:

LayoutParams

或使用其他版本的View view = inflater.inflate(R.layout.comments, _innerLayout); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.BELOW, R.id.commentsHeader); (view.findViewByid(R.id.theIdOfTextView)).setLayoutParams(params); (不附加充气视图并手动将其与正确的inflate()一起添加):

LayoutParams