Intereting Posts
Android: передача данных из дочернего фрагмента в родительский фрагмент После отправки данных на сервер, как печатать ответ в следующем действии? Контакт API хранения контактов как невидимый контакт: как сделать его видимым? Исправление debug.keystore для работы с ADT 22 и API Google Maps v1 API Шифрование AES в iOS и Android и дешифрование в C # .NET Пользовательская операция ожидает завершения фоновой работы Java.lang.IllegalArgumentException: column '_id' не существует Как использовать JarJar с Android для изменения имен пакетов внешних банок? «Конфигурация подписи должна быть указана в сценариях сборки Gradle» … Я сделал это UnsupportedException из Canvas.setBitmap (Bitmap) Как программно сделать снимок экрана в андроиде диалога оповещений Объединить Spinner и AutoCompleteTextView Ndk-build: неопределенная ссылка на .. ошибки при статической привязке к libxml.a Список стран Android с флагами и доступность для получения мобильных кодов iso Какие существуют подписи для подписания Android APK?

Как реализовать расширяемые элементы с LinearLayoutManager (представленный с Android L)

RecyclerView был представлен с Android L и является частью библиотеки AppCompat v7. Затем я решил обновить мое приложение с помощью этого нового RecyclerView чтобы заменить ListView . Для этого, когда дело доходит до установки LayoutManager для RecyclerView , я использую LinearLayoutManager , который отлично работает.

Вот тяжелые вещи: когда я хочу изменить свой ExpandableListView на RecyclerView . Поскольку Google не создал « ExpandableLayoutManager », это довольно сложно, и я не могу этого добиться.

В документации упоминаются дети, но, похоже, это дети корневого представления RecyclerView не сами дети.

У кого-то есть обходное решение или некоторые подсказки? Или, по крайней мере, некоторую информацию, например, где начать, чтобы я мог реализовать свой собственный LayoutManager .

Благодаря,

Solutions Collecting From Web of "Как реализовать расширяемые элементы с LinearLayoutManager (представленный с Android L)"

Эта библиотека помогает вам группировать элементы в «разделы», и затем вы можете реализовать функции expand / collapse, приведенные в этом примере .

Сначала вы создаете класс раздела:

 class MySection extends StatelessSection { String header; List<String> list; boolean expanded = true; public MySection(String header, List<String> list) { // call constructor with layout resources for this Section header and items super(R.layout.section_header, R.layout.section_item); this.myHeader = header; this.myList = list; } @Override public int getContentItemsTotal() { return expanded? list.size() : 0; } @Override public RecyclerView.ViewHolder getHeaderViewHolder(View view) { return new HeaderViewHolder(view); } @Override public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { final HeaderViewHolder headerHolder = (HeaderViewHolder) holder; headerHolder.tvTitle.setText(title); headerHolder.rootView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { expanded = !expanded; headerHolder.imgArrow.setImageResource( expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp ); sectionAdapter.notifyDataSetChanged(); } }); } @Override public RecyclerView.ViewHolder getItemViewHolder(View view) { // return a custom instance of ViewHolder for the items of this section return new MyItemViewHolder(view); } @Override public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { MyItemViewHolder itemHolder = (MyItemViewHolder) holder; // bind your view here itemHolder.tvItem.setText(list.get(position)); } } 

Затем создайте экземпляр ваших разделов и настройте свой адаптер:

 // Create an instance of SectionedRecyclerViewAdapter SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); // Add your Sections sectionAdapter.addSection(new MySection("Section 1", Arrays.asList(new String[] {"Item 1", "Item 2", "Item 3", "Item 4" }))); sectionAdapter.addSection(new MySection("Section 2", Arrays.asList(new String[] {"Item 1", "Item 2" }))); // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter);