Ответ 1
Посмотрите на этот пример Android - Разделенные заголовки в ListViews, он хорошо описывает, как реализовать секционированные заголовки в ListViews.
И
Джефф Шарки SeparatedListAdapter
Спасибо.
Я хочу нарисовать некоторые заголовки разделов в списке Android, как это сделал приложение "Контакты". Когда перетаскивание списка было перетаскивано, заголовки разделов будут двигаться ровно, спасибо.
Посмотрите на этот пример Android - Разделенные заголовки в ListViews, он хорошо описывает, как реализовать секционированные заголовки в ListViews.
И
Джефф Шарки SeparatedListAdapter
Спасибо.
Создайте LAYOUT HEADER в макете элементов списка. Мы используем параметр ВИДИМОСТЬ, чтобы отображать и скрывать LAYOUT HEADER. Это будет действовать как заголовок раздела.
В методе "getView" адаптера проверьте первую букву "поля имени (в случае, когда вы показываете в согласии с именем)", с первой буквой предыдущего поля "СПИСОК ЛИСТОВ". Если он скрывает строку HEADER LAYOUT (с текстовым представлением), еще раз покажите HEADER LAYOUT с текстом заголовка, отображающим первую букву поля Name.
Вот код
Строковое имяFirstLetter = "A";//Объявляем это глобально, а не внутри getView.
//Внутри getView Строка nameF = Name.slice(0,1);
if(!nameFirstLetter.equals(nameF )){
nameFirstLetter = nameF ;
holder.headerText.setText(nameFirstLetter );
holder.headerLayout.setVisibility(View.VISIBLE);
}else{
holder.headerLayout.setVisibility(View.GONE);
}
Это самый простой способ показать заголовок раздела в представлении "Список Android", но он не будет работать, как заголовок раздела Iphone, т.е. Заголовок заголовка скрывается вместе с другими элементами списка при прокрутке вверх/вниз.
Я нашел несколько примеров в Android, чтобы решить эту проблему: См. Пример PinnedHeaderListView Пример PinnedHeaderListView
Если кому-то нужно другое решение, особенно те, которые больше используются для разработки iOS, предпочитают его или хотят подражать внешнему виду iOS; Я рекомендую следующее:
http://applidium.com/en/news/headerlistview_for_android/
Логика такая же, как и для iOS, и делает большую часть работы для вас
Вы можете посмотреть SectionedMergeAdapter. Если у вас есть несколько под-списков данных, вы можете сшить их вместе и иметь для них заголовки.
Пример кода -
ListView listView = (ListView) findViewById(android.R.id.list);
ArrayAdapter<Integer> adapter1 =
new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList1);
ArrayAdapter<Integer> adapter2 =
new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList2);
ArrayAdapter<Integer> adapter3 =
new ArrayAdapter<>(this, R.layout.item_list, android.R.id.text1, arrayList3);
TextView tv1 = new TextView(this);
tv1.setText("Header 1");
TextView tv2 = new TextView(this);
tv2.setText("Header 2");
TextView tv3 = new TextView(this);
tv3.setText("Header 3");
SectionedMergeAdapter adapter = new SectionedMergeAdapter();
adapter.addSection(new SectionedMergeAdapter.Section(tv1, adapter1));
adapter.addSection(new SectionedMergeAdapter.Section(tv2, adapter2));
adapter.addSection(new SectionedMergeAdapter.Section(tv3, adapter3));
listView.setAdapter(adapter);