# fragivity
**Repository Path**: MiniTriangle/fragivity
## Basic Information
- **Project Name**: fragivity
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-01-26
- **Last Updated**: 2021-01-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Fragivity : Use Fragment like Activity
  
- **符合预期的Lifecycle:** 在页面跳转、返回等过程中,生命周期行为与Activity一致
- **多种launchMode:** 支持Standard、SingleTop、SingleTask等多种LaunchMode
- **转场动画:** 支持Transition、SharedElement等动画方式实现页面跳转
- **更高效的通信:** 可以基于Callback通信,简单直接
- **BackPress:** 支持OnBackPressed事件拦截、支持滑动返回
- **Deep Links:** 通过URI跳转到指定Fragment
- **Dialog:** 支持DialogFragment显示
## Installation
```groovy
implementation 'com.github.fragivity:core:$latest_version'
```
## Quick start
### 1. declare NavHostFragment in layout
Like Navigation, Fragivity needs a NavHostFragment as the host of ChildFragments
```xml
```
### 2. load HomeFragment in Activity
```kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host) as NavHostFragment
navHostFragment.loadRoot(HomeFragment::class)
//or load root with factory
//navHostFragment.loadRoot{ HomeFragment() }
}
}
```
### 3. navigate to destination Fragment
```kotlin
//in HomeFragment
val bundle = bundleOf(KEY_ARGUMENT1 to "arg1", KEY_ARGUMENT2 to "arg2")
navigator.push(DestinationFragment::class, bundle)
```
## Launch Mode
Support multiple startup modes
```kotlin
navigator.push(DestinationFragment::class, bundle) {
launchMode = LaunchMode.STANDARD //default
//launchMode = LaunchMode.SINGLE_TOP
//launchMode = LaunchMode.SINGLE_TASK
}
```
## Transition Animation
```kotlin
navigator.push(LaunchModeFragment::class) {
enterAnim = R.anim.slide_in
exitAnim = R.anim.slide_out
popEnterAnim = R.anim.slide_in_pop
popExitAnim = R.anim.slide_out_pop
}
```
## Communication
You can simply setup communication between two fragments
### 1. start destination Fragment with a callback
```kotlin
class HomeFragment : Fragment(){
private val cb: (Int) -> Unit = { checked ->
//...
}
//...
navigator.push {
DestinationFragment(cb)
}
//...
}
```
### 2. callback to source Fragment
```kotlin
class DestinationFragment(val cb: (Int) -> Unit : Fragment() {
//...
cb.invoke(xxx)
//...
}
```
## Show Dialog
### 1. delclare a DialogFragment
```kotlin
class DialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_dialog, container, false)
return root
}
}
```
### 2. show it
```kotlin
navigator.showDialog(DialogFragment::class)
```
## Deeplinks
### 1. add kapt dependencies
```groovy
kapt 'com.github.fragivity:processor:$latest_version'
```
### 2. declare URI with @Deeplink annotation
```kotlin
@DeepLink(uri = "myapp://fragitiy.github.com/")
class DeepLinkFragment : Fragment() {
//...
}
```
### 3. handle intent in MainActivity
```kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//...
navHostFragment.handleDeepLink(intent)
}
}
```
### 4. start Activity with URI
```kotlin
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("myapp://fragitiy.github.com/"))
startActivity(intent)
```
## License
Fragivity is licensed under the [MIT License](LICENSE).