Есть ли способ установить setContentView (int id) динамически? - PullRequest
1 голос
/ 24 ноября 2011

Я бы хотел иметь возможность циклически просматривать список файлов макета XML вместо указания конкретного в аргументе setContentView.

Очевидно, что типы неправильны, но что-то вроде:

ArrayList<String> pages = new ArrayList<String>();
//(Where each of the xml pages are stored like R.layout.page1, R.layout.page2, etc)
setContentView(pages.get(0));

Возможно ли это как-то?

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Вместо этого вы должны использовать виджет ViewFlipper . Вот пример .

Так проще управлять представлениями контента и их дочерними виджетами.

В любом случае, идентификаторы ресурсов можно получить из имен, используя метод Resources.getIdentifier .

2 голосов
/ 24 ноября 2011

В приложении, которое я создал, я использую следующий код для установки кнопки изображения для определенного ресурса:

imgBtnCard.setImageResource(this.getResources()
    .getIdentifier("com.twp.cptshitface:drawable/" +
        cardType + cardDetails[1] , null, null));

Я бы сказал, что это то, что вы ищете:

int resLayoutId = this.getResources().
    getIdentifier("your.package.namespace:layout/" +
    pages.get(0), null, null);

setContentView(resLayoutId);
// where pages.get(0) returns a string such as "main2"

Я быстро протестировал этот код в методе onCreateMethod.

не забудьте очистить свой проект, если вы добавите больше макетов и / или ресурсов для обновления идентификаторов!

2 голосов
/ 24 ноября 2011

Да. возможно. Но две заметки:

  1. Идентификаторы: int с, а не String с.
  2. Вам необходимо правильно управлять представлениями внутри них.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...