Как нарисовать заголовок раздела в списке просмотра Android так же, как UITableview IOS? - PullRequest
15 голосов
/ 30 октября 2011

Я хочу нарисовать некоторые заголовки разделов в виде списка Android, как это делал приложение Контакты.Когда перетаскивается список, заголовки разделов будут двигаться ровно, спасибо.

Ответы [ 5 ]

19 голосов
/ 30 октября 2011

Просто посмотрите на этот Android - Секционированные заголовки в ListViews . Здесь подробно описано, как реализовать Секционированные заголовки в ListViews.

И

android-amazing-listview

Разделенный список адаптеров Джеффа Шарки

MergeAdapter от CommonsWare

Спасибо.

12 голосов
/ 20 июня 2013

Создайте макет заголовка в макете элемента списка. Мы используем опцию VISIBILITY, чтобы показать и скрыть макет заголовка. Это будет действовать как заголовок раздела.

В методе «getView» адаптеров проверьте первую букву «поля имени (в случае, если вы показываете его в соответствии с именем)» с первой буквой предыдущего «поля имени» СПИСОК ИЗДАНИЙ. Если он скрывает ЗАГОЛОВОК ВЫПОЛНЕНИЯ (с текстовым представлением), в противном случае покажите ЗАГОЛОВОК ВЫСТАВКИ с текстом заголовка, показывающим первую букву поля имени.

Вот код

String nameFirstLetter = "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, т.е. Заголовок раздела скрывается вместе с другими элементами списка при прокрутке вверх / вниз.

3 голосов
/ 28 ноября 2013

Если кому-то нужно другое решение, особенно те, которые более привыкли к разработке под iOS, предпочитаете его или хотите имитировать внешний вид iOS; Я рекомендую следующее:

http://applidium.com/en/news/headerlistview_for_android/

Логика та же, что и для iOS, и выполняет большую часть работы за вас

3 голосов
/ 12 июня 2013

Я нашел несколько примеров в Android, которые могут решить эту проблему: Пожалуйста, найдите пример о PinnedHeaderListView Пример PinnedHeaderListView

0 голосов
/ 17 июля 2016

Вы можете взглянуть на 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...