Get Started
Learn how to use this library. Better if consider using CodePocketBuilder, a code template generator for better dessign pattern
Installation
//root build.gradle
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
//add dependency
dependencies {
implementation 'com.github.jamesdeperio:PocketLib:2.2.0'
//To use BaseSwipeFragment include
implementation 'me.yokeyword:swipebackfragment:0.4.0'
//To use EventPublisher include
implementation 'io.reactivex.rxjava2:rxjava:x.x.x'
implementation 'io.reactivex.rxjava2:rxandroid:x.x.x'
//To use PocketDialog include
implementation 'com.airbnb.android:lottie:2.7.0'
}
Usage
Here are the available classes that you can use to your project:
BaseActivity / BaseFragment / BaseSwipeFragment
Extends your class using this base controller.
Method | Description |
---|---|
initialization(savedInstanceState: Bundle?) | Place where you should initialize or set your object. |
onLoadEvent(savedInstanceState: Bundle?) | On View did load. Start your procedure. |
Example:
//kotlin
class MainController : BaseSwipeFragment(), HasMainContract.Event {
override fun initialization(savedInstanceState: Bundle?) {
//todo
}
override fun onLoadEvent(savedInstanceState: Bundle?) {
//todo
}
}
PocketAdapter
This base class is for recyclerview adapter.
Method | Description |
---|---|
getItemCount() | Override and set the list size. |
viewTypeCondition(position: Int) | Override and set condition on what viewholder to display. Default is 0. |
addViewHolder(viewHolder: PocketViewHolder) | Use to add and bind viewholder to adapter. |
Example:
//kotlin
data class YOURDATA(
var isHeader:Boolean = false,
var isFooter:Boolean = false,
var value:String? = null
)
class YOURADAPTER : PocketAdapter() {
var dataList: MutableList<YOURDATA> = ArrayList()
override fun getItemCount(): Int = dataList.size
override fun viewTypeCondition(position: Int)
= if(dataList[position].isHeader()) 0
else if(dataList[position].isFooter()) 1
else 2
// NOTE: magic number, you can improve using enum
}
PocketViewHolder
This base class is for recyclerview viewholder.
Method | Description |
---|---|
onBindViewHolder (view: View, position: Int) | Bind your datalist on view. |
setContentView(layoutID: Int) | Set the layout of viewholder. |
Example:
//kotlin
class HEADERVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
override fun onBindViewHolder (view: View, position: Int) {
view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
}
}
class FOOTERVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
override fun onBindViewHolder (view: View, position: Int) {
view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
}
}
class ITEMVIEWHOLDER( private val adapter: YOURADAPTER) : PocketViewHolder() {
override fun onBindViewHolder (view: View, position: Int) {
view.findViewById(R.id.textView)!!.text = adapter.dataList[position].data.value
}
}
val adapter = YOURADAPTER()
val header = HEADERVIEWHOLDER(adapter)
val footer = FOOTERVIEWHOLDER(adapter)
val content = ITEMVIEWHOLDER(adapter)
header.setContentView(R.layout.item_list_header)
footer.setContentView(R.layout.item_list_footer)
content.setContentView(R.layout.item_list_content)
adapter.addViewHolder(header) // index 0 itemViewType
adapter.addViewHolder(footer) // index 1 itemViewType
adapter.addViewHolder(content) // index 2 itemViewType
//Note: This is the magic number.
PageBuilder
Builder for creating viewpager.
Method | Description |
---|---|
setViewPager(?) | Assign viewpager. |
setTabLayout(?) | Assign tab layout. |
setFragmentManager(?) | Assign fragment manager/ child fragment manager. |
addPage(title: String, fragment: Fragment) | Add page in viewpager. |
build() | Build to commit configuration. |
Example:
//kotlin
PageBuilder.build {
setViewPager(VIEW_PAGER)
setFragmentManager(FRAGMENT_MANAGER/CHILD_FRAGMENT_MANAGER)
setTabLayout(TAB_LAYOUT)
setPageTransformer(TRANSFORMER) // can be null
addPage("tab1",YourFragment())
addPage("tab2",YourFragment())
addPage("tab3",YourFragment())
}
Navigate
Utility class for fragment transaction.
Method | Description |
---|---|
using(?) | Assign fragment manager. |
change(?) | Assign layout ID to be changed. |
withBackStack(?) | Allow backstack or not. |
from(?) | Assign current fragment. If function is not used it will just replace the view. |
to(?) | Assign fragment to use. |
from(currentFragment: Fragment, fromAnimEnter: Int, fromAnimExit: Int) | Assign current fragment and xml anim ID. |
to(fragmentToChange: Fragment, toAnimEnter: Int, toAnimExit: Int) | Assign fragment to use and xml anim ID. |
remove(?) | Assign fragment to remove. |
addSharedElement(view:View,name:String) | Add shared element. |
commitAllowingStateLoss() | Commit transaction that allow state loss. |
commit() | Commit transaction. |
Example:
//kotlin
//from activity / replace fragment
Navigate.using(fragmentManager = fragmentManager!!)
.change(layoutID = R.id.fragment_container)
.to(fragmentToChange = YOUR_FRAGMENT)
.withBackStack(isBackstackEnabled = false)
.commit()
//from fragment with backstack / using BaseSwipeFragmen
Navigate.using(fragmentManager = fragmentManager!!)
.change(layoutID = R.id.fragment_container)
.from(currentFragment = fragment)
.to(fragmentToChange = YOUR_FRAGMENT)
.withBackStack(isBackstackEnabled = true)
.commit()
PocketSpinnerDialog<T>
Searchable Spinner Dialog builder. Just assign data object as the generic.
Method | Description |
---|---|
setSpinnerView(?) | Assign a Button/TextInputEditText/PocketSpinner to spinner dialog. |
setListener(?) | Assign item selected listener. |
addItem(itemObject:T,itemString:String) addItem(itemString:String) addItem(itemStrings:MutableList<String>) addItem(items:MutableList<T>,itemStrings:MutableList<String>) addItem(items:MutableMap<T,String>) |
Ways to add an item to spinner dialog. |
Example:
//kotlin
data class Person (var id:Int=0, var name:String? = null, var address:String? = null )
var dialog= PocketSpinnerDialog(context = context,isFullScreen = false).apply {
this.setSpinnerView(BUTTON)
//you can override the default function of setOnItemSelectedListener
this.setOnItemSelectedListener { selectedObject, selectedItem, selectedIndex, spinner ->
BUTTON.text=selectedItem
}
val person1 = Person(id = 1,name = "ABC",address = null)
this.addItem(itemObject = person1,itemString = person1.name!!)
val person2 = Person(id = 1,name = "XYZ",address = null)
this.addItem(itemObject = person2,itemString = person2.name!!)
}
dialog.show()
PocketDialog
Customizable dialog like warning or error.
Example:
// DEFAULT DESIGN AND LOTTIE ANIMATION:
// PocketDialog.Type.DIALOG_NO_INTERNET_CONNECTION
// PocketDialog.Type.DIALOG_WARNING
// PocketDialog.Type.DIALOG_REWARD
// PocketDialog.Type.DIALOG_BASIC
// PocketDialog.Type.DIALOG_ERROR
// PocketDialog.Type.DIALOG_SUCCESS
// PocketDialog.Type.DIALOG_LOADER
var dialog = PocketDialog(context = context,type = PocketDialog.Type.DIALOG_WARNING,isFullScreen = false).apply {
// okAction (customize the ok button)
// cancelAction (customize the cancel button)
// title (customized the title textview)
// description (customize the description textview)
// view (customize the dialog view)
// lottie (customize the lottie animation)
// dialog (customize the dialog)
}
dialog.show()
More CustomView
This list of custom view prevents bugs/error caused by animation. Can be use in xml.
View |
---|
PocketHorizontalScrollView() |
PocketNestedScrollView() |
PocketScrollView() |
PocketTabLayout() |
PocketViewPager() |
PocketRecyclerView() |
RecyclerViewLayoutManager |
---|
PocketGridLayout() |
PocketLinearLayout() |
PocketStaggeredLayout() |
EventPublisher
A reactive event bus that can create and listen multiple channel.
Method | Description |
---|---|
subscribeReceiver(channel: String, eventReceiver: (event:Any) -> Unit) | Create channelID and set callback for receiver. |
sendEvent(channel:String,event: Any) | Send event based on channelID |
unSubscribeReceiver(channel:String,receiverID:Int) | Dispose receiver based on channelID. |
disposeChannel(channel:String) | Dispose channel. |
disposeAllChannel() | Dispose all channel. |
getActiveReceiverSize(channel: String) | Get the count of receiver based on channelID. |
getActiveReceiverID(channel: String) | Get the list of active receiverID based on channelID. |
getActiveChannelSize() | Get the count of channels. |
getActiveChannel() | Get the list of channel. |
Declaration:
val eventPublisher = EventPublisher(Bus.PublishSubject)
val eventPublisher = EventPublisher(Bus.AsyncSubject)
val eventPublisher = EventPublisher(Bus.ReplaySubject)
val eventPublisher = EventPublisher(Bus.BehaviorSubject)
val eventPublisher = EventPublisher(Bus.UnicastSubject)