Skip to content

Instantly share code, notes, and snippets.

class NavigationActivity : AppCompatActivity() {
private lateinit var fragmentContainer: ViewGroup
private lateinit var navigationDelegate: NavigationDelegate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fragmentContainer = findViewById(R.id.fragment_container) as ViewGroup
navigationDelegate = NavigationDelegate(supportFragmentManager, fragmentContainer.id)
class NavigationDelegate(private val fragmentManager: FragmentManager,
private val containerId: Int) {
init {
fragmentManager.addOnBackStackChangedListener {
val currentFragment = fragmentManager.findFragmentById(containerId)
currentFragment.userVisibleHint = true
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
  isVisibleToUser = isVisibleToUser
  awaitingRunnable?.let {awaitingRunnable.run()}
 }
public fun initBackStackListener() {
supportFragmentManager.addOnBackStackChangedListener {
  val currentFragment = supportFragmentManager.findFragmentById(fragmentContainer.id)
  currentFragment.userVisibleHint = true
}
public class MasterFragment : Fragment() {
public fun navigateToSlave() {
(activity as MainActivity).navigate(from = this, to = SlaveFragment.newInstance())
}
}
class MainActivity : AppCompatActivity() {
private lateinit var fragmentContainer: ViewGroup
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
fragmentContainer = findViewById(R.id.fragment_container) as ViewGroup
}
public class DetectingVisibilityFragment extends Fragment {
// will talk about this flag later
private var isVisibleToUser: Boolean = true
private var awaitingRunnable: Runnable? = null
// triggered when notification from Server or client EventBus came
override fun onNotification(newName: String) {
if(isVisibleToUser) show(newName)
else awaitingRunnable = () -> show(newName)
}
public class DetectingVisibilityFragment extends Fragment {
// will talk about this flag later
private var isVisibleToUser: Boolean = true
private var awaitingRunnable: Runnable? = null
// triggered when notification from Server or client EventBus came
override fun onNotification(newName: String) {
if(isVisibleToUser) show(newName)
else awaitingRunnable = () -> show(newName)
}