Ваш оператор коммутатора неверен
switch (view.getId()) {
case R.id.arts:
setContentView(R.layout.arts);
case R.id.music:
setContentView(R.layout.music);
}
должен быть
switch (view.getId()) {
case R.id.arts:
setContentView(R.layout.arts);
break;
case R.id.music:
setContentView(R.layout.music);
break;
}
Вы не ставите разрывы в своем коммутаторе, что позволяет вашему коммутатору переходить к следующему оператору.Это означает, что метод setContentView, который вы вызываете, всегда будет нижним в вашем переключателе.Добавьте туда "break;", которые я показал, и вам будет хорошо пойти
Я не уверен, откуда люди приходят к выводу, что вы не можете вызывать setContentView более одного раза.Это, безусловно, возможно, и я только что проверил это сам, чтобы убедиться.
Проблема заключается в управлении данными на экране при простом вызове setContentView.Если у вас есть макет с 2 кнопками на экране, а затем вы переключаетесь на одну с 3 кнопками на экране, вы должны как-то различать эти макеты в своем коде.В этом случае использование совершенно нового вида деятельности будет лучшим вариантом.Меньше логического кода и в целом проще в управлении.Тем не менее, я уверен, что есть случаи, когда вызов setContentView более одного раза в одном и том же упражнении является подходящим ответом