2013-06-18 4 views
1

У моего приложения есть куча XML-макетов. теперь я хочу добавить функциональность, в которой определенное число, т. е. 15, из них будет включено в действие. 15 макетов следует выбирать случайным образом при каждом запуске. Как мне это сделать? Я думал о массиве, но не мог найти хорошую ссылку о том, как включать xml-файлы в массив (случайный).как отображать случайные xml-макеты в android

ответ

6

ссылки на размещение являются ints. вы можете просто выбрать один с помощью:

int[] layouts = new int[] {R.layout.one, R.layout.two, R.layout.three ...}; 

setContentView(layouts[new Random().nextInt(layouts.length)]); 
+0

@ downvote, любые комментарии? – njzk2

+0

-1: Прямо сейчас вы даете 0, 1, 2 как можно больше ints. Это не обязательно эквивалентно идентификаторам макета. Вы хотите иметь 'setContentView (layouts [new Random(). NextInt (layout.length)]);' – tilpner

+0

Я уже пробовал способ, аналогичный вашему предложению, и он работает для случайного отображения любых моих макетов. но как я «динамически (?)» определяет, какой из моих 100 макетов делает его массивом как случайный выбор (всего 15, например)? – jay

1

Вы можете переопределить Application.onCreate или в главном Activity.onCreate() и установить идентификатор ресурса нужного макета в SharedPreference.

public static final String LAYOUT_ID = "random.layout.id"; 
private static int[] LAYOUTS = new int[] { R.layout.default, R.layout.fancy }; 

public void onCreate() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    prefs.edit().putInt(LAYOUT_ID, getRandomLayoutId()).commit(); 
} 

private int getRandomLayoutId() { 
    Random r = new Random(Calendar.getInstance().getTimeInMillis()); 
    return LAYOUTS[r.nextInt(LAYOUTS.length)]; 
} 

Этот идентификатор может быть использован где-то в вашем приложении с помощью setContentView().

private static final int DEFAULT_ID = R.layout.default; 

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
setContentView(getInt(MyApplication.LAYOUT_ID, DEFAULT_ID)); 

Если вы делаете это в своей основной деятельности, он может применять новый макет даже при изменении ориентации или подобных событиях.

Смежные вопросы