A better ExpandableListView, with animated expandable views for each list item

Overview

SlideExpandableListView for Android

Screenshot

Not happy with the Android ExpandableListView android offers? Want something like the Spotify app. This library allows you to have custom listview in wich each list item has an area that will slide-out once the users clicks on a certain button.

Features

  • Provides a better ExpandableListView usable for normal ListView's
  • Animates by default
  • Easy to use

Repository at https://github.com/tjerkw/Android-SlideExpandableListView/.

Usage

Layout

Use a normal list view in your layout. You may also use a ListActivity or ListFragment

<ListView
    android:id="@+id/list"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent" />

The list item view should have a toggle button (Button view), and a target view that will be expanded. By default the expandable view will be hidden. An when a user clicks the toggle button the expandalbe view will slide out and be visible.

For example here below we have R.id.expandable_toggle_button Button view. And a R.id.expandable LinearLayout which will be expanded. Note that the expandable view does not have to be a LinearLayout, it can be any subclass of View.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical">
	<RelativeLayout
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:orientation="horizontal">

		<TextView
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:id="@+id/text"
				android:text="Hello World"/>

		<!-- this is the button that will trigger sliding of the expandable view -->
		<Button
				android:id="@+id/expandable_toggle_button"
				android:text="More"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content"
				android:layout_alignBottom="@+id/text"
				android:layout_alignParentRight="true"
				android:layout_alignTop="@id/text"/>

	</RelativeLayout>

	<!-- this is the expandable view that is initially hidden and will slide out when the more button is pressed -->
	<LinearLayout
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
			android:orientation="horizontal"
			android:id="@+id/expandable"
			android:background="#000000">

		<!-- put whatever you want in the expandable view -->
		<Button
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:layout_weight="0.5"
				android:text="Action A" />

		<Button
				android:id="@+id/details"
				android:layout_width="fill_parent"
				android:layout_height="fill_parent"
				android:layout_weight="0.5"
				android:text="Action B"/>

	</LinearLayout>
</LinearLayout>

Wrap your ListAdapter

In order to provide the functionality you simply wrap your list adapter in a SlideExpandableListAdapter. The adapter gets the ids to the more button, and the expandable view as parameters. This allows the adapter to find those views.

		ListView list = ... your list view
		ListAdapter adapter = ... your list adapter
		// now simply wrap the adapter
		// and indicate the ids of your toggle button
		// and expandable view
		list.setAdapter(
			new SlideExpandableListAdapter(
				adapter,
				R.id.expandable_toggle_button,
				R.id.expandable
			)
		);

Use the SlideExpandableListView or ActionSlideExpandableListView

In order to simplify the usage of this library, you can also use the mentioned ListViews directly in your layout xml file. The view itself will make sure the ListAdapter is wrapped in a SlideExpandableListAdapter.

See the sample app for usage information.

Including In Your Project

Add the library as a gradle dependency to your project.

Pull Requests

If you have any contributions I am gladly to review them and use them if they make sense.

Changelog

v1.1.0

  • Added ActionSlideExpandableListView for easier event listening, see the sample app
  • Updated the sample app to also contain event handling logic (Solved issue #3)
  • Solved the issue with random views being expanded, due to recycling of views was not properly handled
  • Solved more issues #1 #2

v1.0.0

  • First release!

Acknowledgments

License

Licensed under the Apache License, Version 2.0

githalytics.com alpha

Comments
  • Null Pointer at line 298 in AbstractSlideExpandableListAdapter.writeBitSet

    Null Pointer at line 298 in AbstractSlideExpandableListAdapter.writeBitSet

    Hi, sometimes I got a null pointer exception at line 298 in AbstractSlideExpandableListAdapter.writeBitSet, immediately after rotating or waking up from sleep mode.

    Here is the stacktrace:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{....ContainerActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.writeBitSet(AbstractSlideExpandableListAdapter.java:298)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.access$0(AbstractSlideExpandableListAdapter.java:295)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState.<init>(AbstractSlideExpandableListAdapter.java:319)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState.<init>(AbstractSlideExpandableListAdapter.java:316)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState$1.createFromParcel(AbstractSlideExpandableListAdapter.java:333)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState$1.createFromParcel(AbstractSlideExpandableListAdapter.java:1)
    at android.os.Parcel.readParcelable(Parcel.java:2103)
    at android.os.Parcel.readValue(Parcel.java:1965)
    at android.os.Parcel.readSparseArrayInternal(Parcel.java:2255)
    at android.os.Parcel.readSparseArray(Parcel.java:1687)
    at android.os.Parcel.readValue(Parcel.java:2022)
    at android.os.Parcel.readMapInternal(Parcel.java:2226)
    at android.os.Bundle.unparcel(Bundle.java:223)
    at android.os.Bundle.getSparseParcelableArray(Bundle.java:1240)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:845)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
    at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1856)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:210)
    at com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity.onCreate(RoboSherlockFragmentActivity.java:34)
    at ......ContainerActivity.onCreate(ContainerActivity.java:90)
    at android.app.Activity.performCreate(Activity.java:5104)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    ... 11 more
    java.lang.NullPointerException
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.writeBitSet(AbstractSlideExpandableListAdapter.java:298)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.access$0(AbstractSlideExpandableListAdapter.java:295)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState.<init>(AbstractSlideExpandableListAdapter.java:319)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState.<init>(AbstractSlideExpandableListAdapter.java:316)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState$1.createFromParcel(AbstractSlideExpandableListAdapter.java:333)
    at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter$SavedState$1.createFromParcel(AbstractSlideExpandableListAdapter.java:1)
    at android.os.Parcel.readParcelable(Parcel.java:2103)
    at android.os.Parcel.readValue(Parcel.java:1965)
    at android.os.Parcel.readSparseArrayInternal(Parcel.java:2255)
    at android.os.Parcel.readSparseArray(Parcel.java:1687)
    at android.os.Parcel.readValue(Parcel.java:2022)
    at android.os.Parcel.readMapInternal(Parcel.java:2226)
    at android.os.Bundle.unparcel(Bundle.java:223)
    at android.os.Bundle.getSparseParcelableArray(Bundle.java:1240)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:845)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
    at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1856)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:210)
    at com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity.onCreate(RoboSherlockFragmentActivity.java:34)
    at .....ContainerActivity.onCreate(ContainerActivity.java:90)
    at android.app.Activity.performCreate(Activity.java:5104)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    at android.app.ActivityThread.access$600(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
    
    opened by marcorighini 28
  • NullPointerException at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.enableFor(AbstractSlideExpandableListAdapter.java:211)

    NullPointerException at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.enableFor(AbstractSlideExpandableListAdapter.java:211)

    10-02 17:29:28.127: E/AndroidRuntime(31121): FATAL EXCEPTION: main 10-02 17:29:28.127: E/AndroidRuntime(31121): java.lang.NullPointerException 10-02 17:29:28.127: E/AndroidRuntime(31121): at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.enableFor(AbstractSlideExpandableListAdapter.java:211) 10-02 17:29:28.127: E/AndroidRuntime(31121): at com.tjerkw.slideexpandable.library.AbstractSlideExpandableListAdapter.getView(AbstractSlideExpandableListAdapter.java:127) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.AbsListView.obtainView(AbsListView.java:2207) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.ListView.makeAndAddView(ListView.java:1845) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.ListView.fillDown(ListView.java:678) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.ListView.fillFromTop(ListView.java:739) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.ListView.layoutChildren(ListView.java:1661) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.AbsListView.onLayout(AbsListView.java:2037) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.View.layout(View.java:14173) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewGroup.layout(ViewGroup.java:4484) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.View.layout(View.java:14173) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewGroup.layout(ViewGroup.java:4484) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.LinearLayout.onLayout(LinearLayout.java:1441) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.View.layout(View.java:14173) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewGroup.layout(ViewGroup.java:4484) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.View.layout(View.java:14173) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewGroup.layout(ViewGroup.java:4484) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2213) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1977) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1166) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5013) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.Choreographer.doCallbacks(Choreographer.java:579) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.Choreographer.doFrame(Choreographer.java:548) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.os.Handler.handleCallback(Handler.java:725) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.os.Handler.dispatchMessage(Handler.java:92) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.os.Looper.loop(Looper.java:153) 10-02 17:29:28.127: E/AndroidRuntime(31121): at android.app.ActivityThread.main(ActivityThread.java:5299) 10-02 17:29:28.127: E/AndroidRuntime(31121): at java.lang.reflect.Method.invokeNative(Native Method) 10-02 17:29:28.127: E/AndroidRuntime(31121): at java.lang.reflect.Method.invoke(Method.java:511) 10-02 17:29:28.127: E/AndroidRuntime(31121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 10-02 17:29:28.127: E/AndroidRuntime(31121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 10-02 17:29:28.127: E/AndroidRuntime(31121): at dalvik.system.NativeStart.main(Native Method)

    opened by samkazmi 10
  • Expandable View layout_height must be fixed.

    Expandable View layout_height must be fixed.

    This does not function when using wrap_content for the layout_height of the collapsable view. The animator cannot get a proper value for mEndHeight because the view has not been laid out yet.

    enhancement 
    opened by nathanielwolf 10
  • Added OnItemExpandCollapseListener code to AbstractSlideExpandableListAd...

    Added OnItemExpandCollapseListener code to AbstractSlideExpandableListAd...

    I added code which triggers a callback whenever an item expands or collapses because I needed to drastically change the look of the list view item when it was expanded. If you feel this kind of thing would be useful for other people using the library, please merge the pull request. The code is tested and working.

    Regards, Dino

    opened by reisub 9
  • Modification to define a custom button and expandable area.

    Modification to define a custom button and expandable area.

    I added a modification as noted in #60. This change allows it to define a custom button for expandable area. I also added files for supporting Android Studio / the gradle build system.

    opened by rekire 7
  • Slow Scrolling on big List's

    Slow Scrolling on big List's

    Great Library man just what I was looking for I would just like to put out one enhancement, on big list's I think its known that the scrolling is very laggy even on really beefy devices. I will take a look into it as well but I would just like to put it out there. But thanks for the hard work.

    opened by JesseFarebro 6
  • the OnItemExpandCollapseListener not work!

    the OnItemExpandCollapseListener not work!

    I want to change the icon of the toggleButton when I click the btn.So I set a OnItemExpandCollapseListener on the SlideExpandableListAdapter,but not work. When I debug,the listener is null.Why?

    opened by chenchongyu 5
  • Fix RuntimeException when unmarshalling data

    Fix RuntimeException when unmarshalling data

    I noticed a bug when using the SlideExpandableListView. The reproduction of the bug is as follows:

    1. In Android OS settings, go under Developer options and enable "Do not keep activities"
    2. In Android app, navigate until you get to an activity that uses the SlideExpandableListView
    3. (Optional) I enabled the expansion on the list view
    4. Jump directly out of the app (i.e., press home key)
    5. Open the app again through the launcher or task switch

    This will cause an exception similar to the following: 0 java.lang.RuntimeException: Unable to start activity ComponentInfo{REMOVEDBYAUTHOR}: java.lang.RuntimeException: Parcel android.os.Parcel@425119b: Unmarshalling unknown type code 28 at offset 452 1 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 2 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 3 at android.app.ActivityThread.access$600(ActivityThread.java:141) 4 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 5 at android.os.Handler.dispatchMessage(Handler.java:99) 6 at android.os.Looper.loop(Looper.java:137) 7 at android.app.ActivityThread.main(ActivityThread.java:5103) 8 at java.lang.reflect.Method.invokeNative(Native Method) 9 at java.lang.reflect.Method.invoke(Method.java:525) 10 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 11 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 12 at dalvik.system.NativeStart.main(Native Method) 13 Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@425119b: Unmarshalling unknown type code 28 at offset 452 14 at android.os.Parcel.readValue(Parcel.java:2038) 15 at android.os.Parcel.readSparseArrayInternal(Parcel.java:2284) 16 at android.os.Parcel.readSparseArray(Parcel.java:1693) 17 at android.os.Parcel.readValue(Parcel.java:2028) 18 at android.os.Parcel.readMapInternal(Parcel.java:2255) 19 at android.os.Bundle.unparcel(Bundle.java:223) 20 at android.os.Bundle.getSparseParcelableArray(Bundle.java:1237) 21 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:861) 22 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 23 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 24 at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1872) 25 at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:215)

    After debugging, I noticed this issue is similar to that described by this SO article: http://stackoverflow.com/questions/19672772/parcel-unmarshalling-unknown-type-code

    It looks like the code in SavedState has the code for writing and reading the parcel reversed. This patch resolves this problem.

    opened by kquan 4
  • how to properly call method collapseLastOpen()  ?

    how to properly call method collapseLastOpen() ?

    when I call method collapseLastOpen() method when i click the item and start another activity,after come back,I come across this phenomenon?Can you give me some advice or give me a hand,thx very much list_item

    opened by songzhiyong 4
  • ActionSlideExpandableListView.OnActionClickListener method name

    ActionSlideExpandableListView.OnActionClickListener method name

    Hello,

    The Listview works great. Thanks!

    May you please change the onClick method name? I let my Fragment implement the listener. But I think an onClick method in a Fragments isn't nice to read. My first suggestion was "onClick? ... onClick WHAT?"

    Something like onExpandableItemClick or so would be nicer.

    Pascal

    opened by passsy 4
  • More advance sample application.

    More advance sample application.

    Hi! Planing to use this library for my new app, and it feels like when i look at the sample application that it is a little "thin". For those who is like me, not pros, it could really help if you added some functionality to the sample so you can see how it work and how you should use it.

    I my selves have problem understanding how I can set click listeners on the buttons that is being slide down when you press the "slide down button" or how i should to to update a textview in the slidedown area. Also is it possible to set click listener on the actual "slide down button"?

    Thank you!

    enhancement 
    opened by joakim5937x 4
  • Stop going to the center of the view when you expand

    Stop going to the center of the view when you expand

    When I press the button to expand the view, I simply want the view to expand without me being dragged down.

    How do I disable the focus down when I expand?

    opened by stefanionescu 0
  • how to do with the expandable_button

    how to do with the expandable_button

    my expandable_button is a image arrow, when i click it , i want to change the it and set another arrow. like: < to >, or : ^ to > , etc how can i do ?

    opened by tracy1allen3 1
  • how can i do if there are many click ids?

    how can i do if there are many click ids?

    we use it like this below: list.setItemActionListener(new ActionSlideExpandableListView.OnActionClickListener() { ....... }, R.id.xxx, R.id.xxxxx); The problem is : when i have many click ids, and the click ids are added Dynamic。 how can i do ?

    opened by tracyallen 0
  • can setOnItemClickListener work? or other method can use?

    can setOnItemClickListener work? or other method can use?

    i have try setOnItemClickListener method for doing something when user click listview item like this:

    playListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { onStartVideo(position); } });

    but it did not work, why? have some else method to realize this? setItemActionListener seems to work only when click action button.

    thands to your help!

    opened by xsjqqq123 4
Owner
Tjerk Wolterink
Lead Software Engineer with Expertise in Android, Python, Java, Golang. Excited about Kotlin and Kotlin Native
Tjerk Wolterink
An open source Android library that provides a floating group view at the top of the ExpandableListView

FloatingGroupExpandableListView FloatingGroupExpandableListView is a huge name an open source Android library that provides a floating group view (aka

Diego Lima 376 Nov 28, 2022
Expandable Recyclerview makes it easy to integrate nested recycler view...🔨 📝

SSExpandableRecyclerView Expandable Recyclerview make it easy to integrate nested recyclerview Features Simple and easy to use ( no complex adapter re

Simform Solutions 52 Nov 1, 2022
Android library to observe scroll events on scrollable views.

Android-ObservableScrollView Android library to observe scroll events on scrollable views. It's easy to interact with the Toolbar introduced in Androi

Soichiro Kashima 9.6k Dec 30, 2022
Android widget with pull to refresh for all the views,and support loadMore for ListView , RecyclerView, GridView and SwipeRefreshLayout.

CommonPullToRefresh Android widget with pull to refresh for all the views,and support loadMore for ListView,RecyclerView,GridView and SwipeRefreshLayo

null 1.1k Nov 10, 2022
A small android library for tagging views inside a ScrollView as "sticky" making them stick to the top of the scroll container until a new sticky view comes and takes it's place

StickyScrollViewItems StickyScrollViewItems is a ScrollView subclass that allowed you to mark items inside the ScrollView as sticky. The items marked

Emil Sjölander 1k Jan 7, 2023
Horizontal list view for Android which allows variable items widths

Deprecated This widget is now deprecated and it won't be updated anymore. Use RecyclerView instead Horizontal Variable ListView Horizontal ListView fo

Alessandro Crugnola 862 Nov 15, 2022
An easy to use Drag & Drop List for Android. Direct replacement of the android ListView.

DragNDropListView DragNDropListView is a direct replacement for the stock Android ListView. If you know how to use ListView, you already know how to u

null 187 Dec 22, 2022
The Words app is a simple dictionary app, with a list of letters, words for each letter, and the ability to look up definitions of each word in the browser.

Words App This folder contains the source code for the Words app codelab. Introduction Words app allows you to select a letter and use Intents to navi

Lynne Munini 2 Oct 11, 2022
🚀📱💖Animated LazyColumn/Row changes scale/color with animation and have a current selected item like a Pager. An elegant alternative for selecting from a list

Compose AnimatedList Animated infinite and finite LazyRow and LazyColumn with scale and color animations on scroll change based on how far they are to

Smart Tool Factory 47 Nov 16, 2022
类似 iOS 带弹簧效果的左右滑动控件,可作为 AbsListView 和 RecyclerView 的 item(作为 AbsListView 的 item 时的点击事件参考代码家的 https://github.com/daimajia/AndroidSwipeLayout )

?? BGASwipeItemLayout-Android ?? 类似iOS带弹簧效果的左右滑动控件,可作为AbsListView和RecyclerView的item。支持给BGASwipeItemLayout和其子控件设置margin和padding属性 效果图 Gradle依赖 dependen

王浩 469 Dec 9, 2022
ItemDecorator - Custom item decorator for adding divider for only the first item of a RecyclerView

ItemDecorator Custom item decorator for adding divider for only the first item o

null 1 Apr 1, 2022
Android Navigation Fragment Share Element Example: Use Share Element Transition with recyclerView Item and ViewPager2 Item.

Android-Navigation-Fragment-Share-Element-Example 说明 Android 使用Navigation导航切换Fragment中使用共享元素过渡动画的例子:将在listFragment的RecyclerView的Item共享元素过渡到pagerFragme

null 3 Sep 28, 2022
An Online Meme Sharing app with swipeable vidoes, user can like, share different videos, each viewpager item has one video to show.

MemesSharing An Online Meme Sharing app with swipeable vidoes, user can like, share different videos, each viewpager item has one video to show. 1. Fl

Vikas Bajpayee 13 Aug 6, 2022
Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

null 0 Jan 22, 2022
Implementation of ExpandableListview with custom header and custom content.

ExpandableLayout ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow

Robin Chutaux 1.6k Dec 12, 2022
Bringing extended scrolling features to Android's native ListView and ExpandableListView.

About QuickScroll QuickScroll is a library aimed at creating similar scrolling experiences to the native Contacts app's People view. It has the same s

Andras Kindler 461 Nov 11, 2022
An open source Android library that provides a floating group view at the top of the ExpandableListView

FloatingGroupExpandableListView FloatingGroupExpandableListView is a huge name an open source Android library that provides a floating group view (aka

Diego Lima 376 Nov 28, 2022
An Android library introducing a stack of Views with the first item being flippable.

FlippableStackView An Android library introducing a stack of Views with the first item being flippable. Views inside the stack remain the aspect ratio

Bartek Lipinski 812 Dec 7, 2022
Display list of item from local Json and download, view after downloading

Download App Features: ● Display fake responses for the list of videos and books ● choose one or multiple files to download, ● show the download perce

Mahmoud Othman 1 Dec 25, 2021