2014-12-08 4 views
1

Я пытаюсь добавить дополнительное пространство между 4-м и 5-м элементами в списке. Какие у меня варианты?Как добавить некоторое пространство в середине списка?

Я попытался сделать это в getView адаптера(), а также вручную получить доступ к четвертому элементу и добавить к нему дополнение.

Есть ли лучший способ сделать это?

+1

вы можете поделиться своим методом getView? –

+0

Добавить элемент пустого списка? – user1888162

ответ

0

Я думал о некоторых способах, но если я должен быть честным, единственный способ сделать это хорошо - это изменить макет в адаптере, когда позиция равна 4. Я имел в виду, что вы можете сделать xml-файл с RelativeLayout той высоты, которую вы хотите как пространство между 4-м и 5-м элементами, и установите видимость для удаления и поместите его выше всех элементов вашего адаптера. Когда позиция равна 4 в вашем getView, вы можете видеть видимость этого элемента видимым с помощью nameOfYourRelativeLayout.setVisibility(View.VISIBLE)

Таким образом, вы можете добавить это пустое место только от 4-го и 5-го элементов. Мой просто предложение, но я думаю, что он может работать хорошо.

1

Другой способ сделать это - использовать другой макет для 4-го элемента (с дополнительным дополнением). Это похоже на ваше решение, но, возможно, немного «чище». Я предполагаю, что вы распространяете ArrayAdapter.

В адаптере переопределить метод getViewTypeCount():

@Override public int getViewTypeCount() { 
    return 2; 
} 

Таким образом, вы говорите, ваш адаптер, который вы будете использовать два различных макетов для ваших деталей. Далее, вы должны указать, какие элементы будут иметь тип переопределяя другой метод:

@Override public int getItemViewType(int position) { 
    if(position == 3) { 
     return 0; 
    } else { 
     return 1; 
    } 
} 

Это подскажет адаптер использовать другой вид (только) для 4-го элемента в списке, и это не будет повторно использовать для других элементов. Теперь для последней части, переопределить onCreateView():

@Override public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     if(position == 3) { 
      convertView = inflater.inflate(R.layout.your_layout_with_padding, parent, false); 
     } else { 
      convertView = inflater.inflate(R.layout.your_regular_item_padding, parent, false); 
     } 

     //TODO this is the place to initialize your view holder 

    } else { 
     //TODO this is the place to restore your view holder 
    } 

    //TODO setup your view here 

    return convertView; 
} 

Для элемента с позицией == 3 (4 пункта в списке) convertView аргументом GetView() метод будет нулевым, так как это первый (и единственный) элемент типа 1 в списке. Поэтому вы можете раздувать другой макет, который включает в себя дополнение для этого элемента.

0

Разместите все свои элементы в списке, чтобы включить ваши данные, а также заголовок, возможно, текстовое представление или даже группу просмотра, такую ​​как другой макет. Держите заголовок невидимым до тех пор, пока какая-либо логика в ваших кодовых триггерах (то есть pos == 4) и не сделает заголовок видимым

Смежные вопросы