Программное изменение полей вызывает ClassCastException

Я хочу настроить поле моего макета при скрытии некоторых элементов, поэтому я пробовал этот код

RelativeLayout mainLayout;
LinearLayout innerLayout;
public void hideInfoarea(){
    mainLayout = (RelativeLayout) findViewById(R.id.mainContainer);
    innerLayout = (LinearLayout) findViewById(R.id.innerLayout);
    mainContainer.removeView(infoLayout);

    //adjust margins
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)innerLayout.getLayoutParams();
    params.setMargins(10, 0, 0, 10);
    innerLayout.setLayoutParams(params);
}

Первоначально поля innerLayout равны 10,0,0,100, и по моему замыслу это должно изменить поля в 10, 0,0,10 после удаления infoLayout, но, к сожалению, я получаю следующую ошибку.

 java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
            at com.myapp.test.Myactivity.hideInfoarea(Myactivity.java:371)
            at com.myapp.test.Myactivity.switchBoxStatus(Myactivity.java:360)
            at com.myapp.test.Myactivity.onOptionsItemSelected(Myactivity.java:256)
            at android.app.Activity.onMenuItemSelected(Activity.java:2600)
            at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:372)
            at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012)
            at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
            at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
            at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546)
            at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

innerLayout - это LinearLayout в моем xml, а не RelativeLayout. поэтому я не понимаю причину проблемы


person AndreaF    schedule 26.03.2014    source источник
comment
Можете ли вы показать, где вы инициализируете mainConsole? Если это RelativeLayout, используйте вместо него RelativeLayout.LayoutParams params.   -  person Dan Harms    schedule 26.03.2014
comment
нет это LinearLayout   -  person AndreaF    schedule 26.03.2014
comment
Ваш код по-прежнему выдает одно и то же исключение после внесения изменений в код при последнем редактировании?   -  person Dan Harms    schedule 26.03.2014
comment
Да, но предложение Fllo решило мою проблему   -  person AndreaF    schedule 26.03.2014
comment
Рад, что у тебя получилось. В следующий раз опубликуйте свой XML-макет, чтобы помочь нам увидеть, как вы определяете эти представления.   -  person Dan Harms    schedule 26.03.2014
comment
@dcharms взгляните на эту связанную проблему "> stackoverflow.com/questions/22650542/   -  person AndreaF    schedule 26.03.2014


Ответы (1)


Как вы можете прочитать android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams. @dcharms прав, вы должны сделать:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) innerLayout.getLayoutParams();  

Потому что родительское представление, содержащее ваш innerLayout, является RelativeLayout, а не LinearLayout.
Дайте мне знать, если у вас получится.

person fllo    schedule 26.03.2014
comment
поэтому я должен использовать родительский класс для получения параметров... спасибо!! - person AndreaF; 26.03.2014
comment
но я получаю другую проблему stackoverflow. ком/вопросы/22650542/ - person AndreaF; 26.03.2014