Вы должны изменить ваше заявление switch
на
final Intent intent = new Intent(this, DisplaySpecificPage.class);
switch (view.getId()) {
case R.id.first_button:
intent.putExtra("mylayout", R.layout.one);
break;
case R.id.second_button:
intent.putExtra("mylayout", R.layout.two);
break;
case R.id.third_button:
intent.putExtra("mylayout", R.layout.three);
break;
case R.id.random_button:
intent.putExtra("mylayout", randomNumber);
startActivity(intent);
}
startActivity(intent);
Таким образом, вы начнете одно и то же действие независимо от того, какая кнопка будет нажата, и в методе onCreate
действия DisplaySpecificPage
вы должны установить содержимое для этого переданного макета:
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
setContentView(layout);
Приведенный выше код передает дополнительный параметр в намерение при запуске действия DisplaySpecificPage
с именем: "mylayout".
Внутри метода DisplaySpecificPage
class 'onCreate
вы просто извлекаете этот дополнительный параметр, используя метод getIntExtra
переданного намерения (getIntent()
вернет его вам), и вы задаете представление содержимого этого DisplaySpecificPage
активность переданного макета по setContentView(layout)
.
Вы должны убедиться, что всегда передаете действительный идентификатор макета для этого намерения, в противном случае вы получите исключение при попытке его раздувать (поэтому randomNumber
должен быть выбран правильно).
Обновление
Добавив дополнения в Intent, вы можете параметризовать свои действия.
Таким образом, используя intent.putExtra("paramName", paramValue)
, вы передадите значение paramValue
для имени paramName
действию, которое вы начнете этим намерением.
Вы хотите начать действие DisplaySpecificPage
, но хотите, чтобы оно имело другой макет в зависимости от того, на какую кнопку вы нажимаете.
Итак, вы создаете намерение:
final Intent intent = new Intent(this, DisplaySpecificPage.class);
Прежде чем начинать действие с вызова startActivity(intent)
, вы должны поместить эту дополнительную информацию в intent
, чтобы действие DisplaySpecificPage
узнало, какой макет следует установить в качестве представления содержимого:
Таким образом, если вы нажали вторую кнопку, вы хотите, чтобы макет вашего нового занятия был таким, как определено two.xml
внутри вашей папки res/layout
. На него ссылаются как R.layout.two
(что является значением static int
).
intent.putExtra("mylayout", R.layout.two);
Эта строка помещает значение макета в качестве дополнительного в объект intent
, и теперь вы можете начать действие, ссылка на макет будет передана ему.
«mylayout» - это имя, которое вы выбираете для своего параметра. Это может быть что угодно (допустимо), оно будет использоваться внутри действия DisplaySpecificPage
для получения ссылки на макет. Получается под этим именем:
final int layout = getIntent().getIntExtra("mylayout", R.layout.one);
Метод getIntExtra
получает целочисленное значение из intent
, имеющего имя «mylayout», и если он не найден, он возвращает R.layout.one.
Если вы хотите обработать этот случай (когда не задан параметр с именем mylayout
), вы можете написать
final int layout = getIntent().getIntExtra("mylayout", -1);
if (layout < 0)
{
//TODO: no layout reference was passed
}