Hm, thanks.

It just seems strange to need to explicitly check to see if the Fragment 
isResumed prior to showing a Dialog. Before Fragments, Activity#showDialog 
would do nothing if the Activity was already torn down. So it seems kind of 
retrograde. 

I take it all instances of DialogFragment#show that occur from a delayed 
handler need to first check to make sure the Fragment is still resumed or 
potentially face the same issue. Or have I missed something?

William

On Monday, April 15, 2013 6:51:09 PM UTC+10, Piren wrote:
>
> Errr... we need a damn edit button here. i meant: " since having it as 
> "started" does *<not>*  guarantee that the fragment is visible."  :)
>
>
> On Monday, April 15, 2013 11:47:22 AM UTC+3, Piren wrote:
>>
>> After onStart has been called and before onStop. 
>> You can be more pedantic about the state if needed - using 
>> isHidden/isVisible/isResumed .. since having it as "started" 
>> does  guarantee that the fragment is visible.
>>
>> On Monday, April 15, 2013 11:32:45 AM UTC+3, William Ferguson wrote:
>>>
>>> Hi Piren, what is an appropriate definition of "Started" in this 
>>> instance?
>>>
>>> WIlliam
>>>
>>> On Monday, April 15, 2013 1:17:36 AM UTC+10, Piren wrote:
>>>>
>>>> Check the fragment state before showing, it should be Started, if not, 
>>>> keep a flag saying that says this dialog needs to be shown. Check for the 
>>>> flag state during onStart/onResume and show the dialog if needed
>>>>
>>>> On Sunday, April 14, 2013 4:25:03 PM UTC+3, William Ferguson wrote:
>>>>>
>>>>> I have a Fragment that fires an async task to connect to a remote 
>>>>> server. If it fails to connect (eg times out) then I use use a Handler to 
>>>>> display a dialog to the user.
>>>>>
>>>>> final DialogFragment newFragment = 
>>>>>> AlertDialogFragment.createConnectionFailedDialog(getSupportActivity());
>>>>>> newFragment.show(getFragmentManager());
>>>>>
>>>>>
>>>>> All good except that the async task if the user navigates away from 
>>>>> the Activity hosting that Fragment (eg goes to Preferences) then when the 
>>>>> time out occurs the Fragment is in a quasi shut down state and the 
>>>>> following exception is thrown.
>>>>>
>>>>> 04-14 23:11:51.407: ERROR/AndroidRuntime(6267): FATAL EXCEPTION: main
>>>>>>         java.lang.IllegalStateException: Can not perform this action 
>>>>>> after onSaveInstanceState
>>>>>>         at 
>>>>>> android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
>>>>>>         at 
>>>>>> android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
>>>>>>         at 
>>>>>> android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
>>>>>>         at 
>>>>>> android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
>>>>>>         at 
>>>>>> org.holoeverywhere.app.DialogFragment.show(DialogFragment.java:369)
>>>>>>         at 
>>>>>> org.holoeverywhere.app.DialogFragment.show(DialogFragment.java:350)
>>>>>>         at 
>>>>>> org.holoeverywhere.app.DialogFragment.show(DialogFragment.java:329)
>>>>>>         at 
>>>>>> au.com.xandar.wirelesstiming.connection.ConnectionFragment.updateUserInterfaceOnClose(ConnectionFragment.java:197)
>>>>>>         at 
>>>>>> au.com.xandar.wirelesstiming.connection.ConnectionFragment.access$200(ConnectionFragment.java:26)
>>>>>>         at 
>>>>>> au.com.xandar.wirelesstiming.connection.ConnectionFragment$2.run(ConnectionFragment.java:96)
>>>>>>         at android.os.Handler.handleCallback(Handler.java:725)
>>>>>>         at android.os.Handler.dispatchMessage(Handler.java:92)
>>>>>>         at android.os.Looper.loop(Looper.java:137)
>>>>>>         at android.app.ActivityThread.main(ActivityThread.java:5041)
>>>>>>         at java.lang.reflect.Method.invokeNative(Native Method)
>>>>>>         at java.lang.reflect.Method.invoke(Method.java:511)
>>>>>>         at 
>>>>>> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
>>>>>>         at 
>>>>>> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
>>>>>>         at dalvik.system.NativeStart.main(Native Method)
>>>>>
>>>>>
>>>>> What is the correct way to handle this scenario?
>>>>>
>>>>> Ideally I'd like to always display the dialog, but if that is not an 
>>>>> option, then what do I use to determine whether the dialog should be 
>>>>> displayed or not?
>>>>>
>>>>>
>>>>> William 
>>>>>
>>>>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to