ProductPromotion
Logo

Kotlin

made by https://0x3d.site

GitHub - inshiro/skate: Android fragment stack controller
Android fragment stack controller. Contribute to inshiro/skate development by creating an account on GitHub.
Visit Site

GitHub - inshiro/skate: Android fragment stack controller

GitHub - inshiro/skate: Android fragment stack controller

Skate

Release GitHub license Platform Kotlin

Skate is a fragment manager controller that allows you to easily navigate from one fragment to another. Simple and seamless. Just like it should be.

FragmentManager has an unfriendly behavior to work with so Skate uses its own stack and backstack to manage fragments. The stack is pushed or popped only when a fragment is added or removed. Otherwise, any modifications are applied accordingly. In my opinion, this should be the intended behavior.

  • No reflection
  • Add/attach/show | Remove/detach/hide fragments
  • Commit with state save
  • Save and restore flow
  • Listen to visibility changes
  • Lifecycle aware
  • Extremely lightweight and fast

Setup

allprojects {
    repositories {
	    maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.inshiro:skate:0.2.1'
}

Initialize

class MainActivity : AppCompatActivity() {

	private lateinit var skate: Skate
	
	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)
		
		// ...
		
		skate = startSkating(savedInstanceState)
		skate.fragmentManager = supportFragmentManager
		skate.container = R.id.main_container
		fragment.mode = Skate.SINGLETON // optional
	
	}
	
	override fun onBackPressed() {
		if (!skate.back)
		    super.onBackPressed()
	}
}

Usages

// Showing
fragment.show()

// Hiding
fragment.hide()

// Navigating
skate to fragment

Modes

Skate has 3 modes it operates on. The default is FACTORY.

// add-remove
Skate.FACTORY = 0

// attach-detach
Skate.SPARING = 1

// show-hide
Skate.SINGLETON = 2

The mode is obtained from Fragment.mode This determines the fragment's behavior on show or hide.

If you show, Skate will hide. Add, remove. etc...

fragment.mode = Skate.SINGLETON

mainFragment.mode = Skate.SPARING

Settings

At any given time you can set the global settings before showing or hiding a fragment.

skate.fragmentManager = supportFragmentManager
skate.container = R.id.main_container // id of your view

// Animations
skate.animationStart = android.R.animator.fade_in
skate.animationEnd = android.R.animator.fade_out

Back stack

By default, fragments are added to the back stack. When going back, if there is currently a visible fragment, it gets hidden.

Listening

To listen to visibility changes, add an implementation of Skate.OnNavigateListener to setOnNavigateListener.

skate.setOnNavigateListener(object : Skate.OnNavigateListener {
    override fun onHide() { }

    override fun onShow() { }

    override fun onBackPressed(current: Fragment?) { }
})

Operations

Sometimes you have lots of fragments you want to work with.

skate.operate {
   hide(BillingFragment)
   hide(PaymentFragment)
   hide(DetailFragment1)
   show(MainFragment)
}

Logging

Skate provides a bit of information about fragment visibility during runtime which might help in debugging visibility-related issues. To enable logging, pass an implementation of Skate.Logger to the Skate.logger property or use the default SkateLogger.

Skate.logger = SkateLogger

Activity Lifecycle

If your application requires a call to any of Skate's methods in an Activity lifecycle method other than onCreate(), do it in either FragmentActivity#onResumeFragments() or Activity#onPostResume(). These two methods are guaranteed to be called after the Activity has been restored to its original state, and therefore avoid the possibility of state loss all together. See this blog for more detail.

License

Copyright 2019 inshiro

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory