Сколько ViewStubs слишком много для одного XML-файла макета? - PullRequest
5 голосов
/ 08 октября 2010

У меня есть макет, определенный в файле XML (base_layout.xml), который может содержать 20+ ViewStub определений в дополнение к 3-5 другим представлениям, таким как ImageView и LinearLayout, содержащим 3-5 ImageButton views.

Должен ли я беспокоиться о том, сколько ViewStub просмотров я размещаю в этом файле макета?

Я прочитал на сайте developer.android:

ViewStub - тупой и легкий вид.У него нет измерения, он ничего не рисует и никак не участвует в макете.Это означает, что ViewStub очень дешев, чтобы его раздувать, и очень дешево хранить в иерархии представлений

Достаточно ли дешево иметь 20+ из них?не все завышены, конечно, только 1-2 за один раз.

когда я говорю cheap enough или говорим о том, чтобы быть concerned, я имею в виду производительность пользовательского интерфейса

edit: что я пытаюсь сделать: создать XML-файл макета, который может стать основой всей моей деятельности.в каждом Activity я буду раздувать правильный ViewStub с макетом деятельности.Поскольку у меня так много занятий, требующих одного и того же скелета, я хочу использовать как можно больше

У меня есть класс Activity, который является родителем почти всех моих действий.этот родительский класс вызывает setContentView(R.layout.base_layout);.для каждого дочернего действия все, что я делаю, надувает соответствующий ViewStub внутри base_layout.xml.это позволяет мне иметь очень настраиваемый пользовательский интерфейс с тем же видом скелета, который используется во всех моих макетах занятий

Ответы [ 2 ]

15 голосов
/ 08 октября 2010

Я не думаю, что вы увидите большой успех производительности. Это все еще дешевле, чем раздувать их все с самого начала.

Недостатком такого большого количества заглушек является то, что вы можете потерять из виду весь дизайн. Возможно, имеет смысл сгруппировать несколько представлений / элементов в одну группу. Может быть, вы могли бы объяснить, что вы пытаетесь сделать, и посмотреть, есть ли лучший способ реализовать это

редактирование: Ну, вместо того, чтобы иметь несколько ViewStubs, которые включают в себя различные подпредставления, такие как

<ViewStub android:id="@+id/stub"
           android:inflatedId="@+id/activity1"
           android:layout="@layout/myActivity1"
           />
<ViewStub android:id="@+id/stub2"
           android:inflatedId="@+id/activity2"
           android:layout="@layout/myActivity2"
           />

просто есть один ViewStub и в ваших действиях onCreate () сделать что-то вроде

setContentView(R.layout.base_layout);
ViewStub stub = (ViewStub)findViewById(R.id.stub);

stub.setInflateId(R.id.activity1);
stub.setLayoutResource(R.layout.myActivity2);
stub.inflate();

Таким образом, у вас все еще будет только один ViewStub в base_layout, который вы можете настроить в коде перед накачкой.

0 голосов
/ 14 мая 2016

LinearLayout или RelativeLayout является расширением ViewGroup

, поэтому я использовал ViewGroup в качестве параметра это мое решение

public CategoryViewController(Context context, ViewGroup containerView) {
        this.context = context;
        LayoutInflater inflater = LayoutInflater.from(context);
        View categoryLayout = inflater.inflate(R.layout.category_section, null, false);
        containerView.addView(categoryLayout);
        this.categoryView = categoryLayout;
}
...