Android: возможно ли сделать копию View? - PullRequest
8 голосов
/ 03 февраля 2012

Для приложения, над которым я работаю, требуется динамический макет, отображающий горизонтальный просмотр профилей. Профиль - это просто 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, а временный профиль теперь является ссылкой на оригинальный файл. Так есть ли способ сделать копию этого RelativeLayout? Я знаю о LayoutInflater, но до сих пор не понимаю, как он работает. Существует также Object.clone().

Ответы [ 3 ]

8 голосов
/ 03 февраля 2012

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

Вот большое обсуждение инфлятора.

2 голосов
/ 03 февраля 2012

вы можете сделать копию вашего инфлятора с новым контекстом. Layout Inflater - Разработчики Android

0 голосов
/ 02 сентября 2017

Почему бы просто не использовать включение в xml-файл для нужного макета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...