Реализация нескольких виджетов и представлений наиболее эффективным способом - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть некоторые сомнения по поводу того, как реализовать необходимые для моего приложения виджеты для моего приложения с использованием C #.

У меня есть три фрагмента, и каждый из них реализует обзор переработчика, давайте назовем их 1, 2, 3 и 4.У меня есть четыре разных типа объектов: A, B, C и D. Все они хранятся в одной коллекции.

Представление переработчика фрагмента 1 должно содержать все из них.

Фрагменты 2 должны содержать только A.

Фрагменты 3 должны содержать только B.

Фрагменты 4должен содержать только C и D.

Как видите, несколько фрагментов в конечном итоге содержат один и тот же тип объекта.Теперь я задаюсь вопросом, лучше ли хранить видоискатель в отдельной папке, скажем, для объекта А, чтобы 1 и 2 могли получить к нему доступ, или лучше реализовать два видоискателя для каждого фрагмента, даже если эти видоискатели будутбыть одним и тем же?

Теперь предположим, что A и B имеют одинаковую структуру макета, но ведут себя по-разному при взаимодействии с ними. Я уверен, что A и B всегда будут иметь одинаковую структуру макета.Лучше иметь два видоискателя и сделать так, чтобы фрагмент проверял, какой тип объекта я получил из коллекции, чтобы он мог выбрать правильный видоискатель, или лучше иметь общий единственный видоискатель, который можно использовать как для A, так и для B, а затемв конце концов, проверьте, содержит ли он A или B, и реализует их поведение.

Допустим, вариант универсального видоискателя лучше, C похож на A и B, но не совпадает, они разделяют 80% макета,Все еще рекомендуется иметь здесь общий видоискатель?У C есть дополнительные представления, которые нужны, чтобы показать, чего нет у A и B.Было бы разумно иметь макет, в котором эти дополнительные виды отключены, а затем становятся видимыми в случае, если у меня есть C, и не отображаются, если у меня есть A и B?Влияет ли тот факт, что A и B имеют эти дополнительные элементы в макете в статусе GONE навсегда, влияют на производительность?Извините, эта часть больше относится к вопросу о том, как состояние GONE взаимодействует с памятью, чем к чему-либо.

Извините за стену текста, также это вопрос только о производительности, а не о том, какая архитектура будет болееполезно работать с точки зрения разработчика.

1 Ответ

0 голосов
/ 25 апреля 2018

Вам нужно использовать что-то вроде этого

Для фрагмента 1

Ваш адаптер RecyclerView должен иметь что-то вроде этого

private final int objA = 1;
private final int objB = 2;
private final int objC = 3;
private final int objD = 4;

@Override
public int getItemViewType(int position) {
   Object obj = list.get(position);
   if(obj instanceof A){
       return objA;
    }      
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
   int type = getItemViewType(position);
   if(type==objA){
      //then show the object
   }
}

Лучше использовать 1 ViewHolder длякаждый адаптер RecyclerView

...