Android: Можно ли сделать копию View?

Приложение, над которым я работаю, требует динамического макета, который отображает профили HorizontalScrollView. Профиль – это просто RelativeLayout с изображением и некоторым текстом. Поскольку я получаю данные из файла данных, мне нужно создать относительную компоновку для каждого из профилей. Сначала я создавал каждый RelativeLayout программно в цикле for, а затем добавлял его в родительский вид. Это работает, но я не хочу этого делать. Я хочу использовать разные файлы макета на основе размера экрана устройства и т. Д.

Тогда я подумал. Что ж, если бы у меня был макет с одним профилем? Мой код может получить этот профиль с findViewById() а затем создать новые, основанные на нем! Другими словами:

  // get the layout profileLayout = (LinearLayout) findViewById(R.id.profileLayout); // get the first profile in the layout originalProfile = (RelativeLayout) findViewById(R.id.profile1); // make copy of profile temporaryProfile = originalProfile; // make changes to the this profile and add it back profileLayout.addView(temporaryProfile); 

Конечно, это не работает, потому что это Java, а временный файл теперь является ссылкой на originalProfile. Так есть ли способ сделать копию этого RelativeLayout? Я знаю LayoutInflater, но я до сих пор не понимаю, как это работает. Существует также Object.clone() .

Solutions Collecting From Web of "Android: Можно ли сделать копию View?"

Не так много. Похоже, что ваш конкретный случай может извлечь выгоду из ListView какого-то типа и адаптера (см. Ресурсы, подобные этому для информации). Если нет, то LayoutInflater лучший ответ, поскольку он делает именно то, что вы хотите. Приобретая один, вы можете использовать его, чтобы «раздуть» любое представление, которое вы определили в ваших файлах макета XML, и делать с ним все, что хотите.

Вот отличная дискуссия о раздуве.

Вы можете сделать копию своего инфлятора с новым контекстом. Макет Inflater – разработчики Android