Установка параметров для завышенного представления внутри RelativeLayout, но получение исключения classcast

Привет, я пытаюсь добавить макет программным путем с помощью надувного устройства (это простой TextView). Родитель раздутого представления – RelativeLayout, который находится в ScrollView. Моя проблема в том, что я пытаюсь разместить новое представление под его заголовком (который находится в RelativeLayout), используя params.addRule и view.setLayoutParams (), но я получаю исключение класса: 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); 

Если вы используете ненулевой View в качестве корня с методом inflate() возвращаемый View будет фактически представлением View переданным в качестве корня в методе. Таким образом, в вашем случае view является _innerLayout RelativeLayout которого в качестве родителя есть ScrollView , который является расширением FrameLayout (что объясняет 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 ):

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