Сколько ViewStubs слишком много для одного XML-файла макета?

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

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

Я читаю на сайте developer.android:

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

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

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

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

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

2 ответа

Решение

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

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

редактировать: ну, вместо того, чтобы иметь несколько 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, который вы можете настроить в коде перед накачкой.

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;
}
Другие вопросы по тегам