Skip to content

Instantly share code, notes, and snippets.

@Anrimian
Last active December 26, 2019 12:39
Show Gist options
  • Save Anrimian/8dc45667f1125b85be626f48f3ec8b18 to your computer and use it in GitHub Desktop.
Save Anrimian/8dc45667f1125b85be626f48f3ec8b18 to your computer and use it in GitHub Desktop.
Utilite class that makes restore fragment dialog state little easier

Example

`

private lateinit var dialogFragmentRunner: DialogFragmentRunnerKt<YourFragment>

//in onCreate()  {
    val fragmentManager = getFragmentManager()
    dialogFragmentRunner = DialogFragmentRunner(  
        fragmentManager ,  
        YOUR_FRAGMENT_TAG
    ) {    
       //fragment initialization code
           setOnCompleteListener()//blahblah blah  
      }
}

fun showDialog() {
    val dialogFragment = //create dialog fragment  
    dialogFragmentRunner.show(dialogFragment)
}

`

public class DialogFragmentRunner<T extends DialogFragment> {
private final FragmentManager fragmentManager;
private final String tag;
private final Callback<T> fragmentInitializer;
public DialogFragmentRunner(FragmentManager fragmentManager,
String tag,
Callback<T> fragmentInitializer) {
this.fragmentManager = fragmentManager;
this.tag = tag;
this.fragmentInitializer = fragmentInitializer;
@SuppressWarnings("unchecked")
T fragment = (T) fragmentManager.findFragmentByTag(tag);
if (fragment != null) {
fragmentInitializer.call(fragment);
}
}
public void show(T fragment) {
fragmentInitializer.call(fragment);
fragment.show(fragmentManager, tag);
}
public interface Callback<T> {
void call(T obj);
}
}
class DialogFragmentRunnerKt<T : DialogFragment>(
private val fragmentManager: FragmentManager,
private val tag: String,
private val fragmentInitializer: T.() -> Unit) {
init {
@Suppress("UNCHECKED_CAST")
val fragment = fragmentManager.findFragmentByTag(tag) as? T?
if (fragment != null) {
fragmentInitializer(fragment)
}
}
fun show(fragment: T) {
fragmentInitializer(fragment)
fragment.show(fragmentManager, tag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment