hang onto DelegateBase instance until replaced via an onStart() call.

They're often needed when the fragment isn't frontmost, i.e. when
onPause() has been called. My caching instances fix is feeling a bit
fragile, but I think it's better than nothing. Alternative is probably
to go with DialogFragments, a big change that might not be easy to
make work back to oldest Android.
This commit is contained in:
Eric House 2016-07-22 12:46:01 -07:00
parent 7634c425ef
commit d6b4070905

View file

@ -92,7 +92,6 @@ public class DelegateBase implements DlgClickNotify,
public void onCreateContextMenu( ContextMenu menu, View view,
ContextMenuInfo menuInfo ) {}
public boolean onContextItemSelected( MenuItem item ) { return false; }
protected void onStart() {}
protected void onStop() {}
protected void onDestroy() {}
protected void onWindowFocusChanged( boolean hasFocus ) {}
@ -121,10 +120,17 @@ public class DelegateBase implements DlgClickNotify,
getClass().getSimpleName() );
}
protected void onStart()
{
if ( s_instances.containsKey(getClass()) ) {
DbgUtils.logdf( "%s.onStart(): replacing curThis",
getClass().getSimpleName() );
}
s_instances.put( getClass(), new WeakReference<DelegateBase>(this) );
}
protected void onResume()
{
Assert.assertFalse( s_instances.containsKey(getClass()) );
s_instances.put( getClass(), new WeakReference<DelegateBase>(this) );
m_isVisible = true;
XWService.setListener( this );
runIfVisible();
@ -132,16 +138,18 @@ public class DelegateBase implements DlgClickNotify,
protected void onPause()
{
s_instances.remove( getClass() );
m_isVisible = false;
XWService.setListener( null );
}
protected DelegateBase curThis()
{
DelegateBase result = null;
WeakReference<DelegateBase> ref = s_instances.get( getClass() );
DelegateBase result = ref.get();
DbgUtils.logf( "%s.curThis() => %s", this.toString(), result.toString() );
if ( null != ref ) {
result = ref.get();
}
// DbgUtils.logdf( "%s.curThis() => " + result, this.toString() );
return result;
}