Как нарисовать заголовок раздела в списке Android так же, как iOS UITableview?

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

Ответы

Ответ 2

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

Ответ 3

Я нашел несколько примеров в Android, чтобы решить эту проблему: См. Пример PinnedHeaderListView Пример PinnedHeaderListView

Ответ 4

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

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

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

Ответ 5

Вы можете посмотреть 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);