gpt4 book ai didi

android - 在后台 Activity 时关闭 DialogFragment(支持库)获取 IllegalStateException

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:15 25 4
gpt4 key购买 nike

在我的应用程序的 Activity 中,我需要在上传某些内容时显示“正在加载”不可取消的 FragmentDialog。我在当前 Activity 中通过回调显示此对话框,如下所示:

final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
final Fragment prev = fm.findFragmentByTag( "loading" );
if ( prev != null ) {
ft.remove(prev);
}
ft.addToBackStack(null);
final DialogFragment df =
IndeterminateProgressDialogFragment.newInstance(
getString( R.string.loading_dialog_sending_data ) );
df.setCancelable( false );
df.show( ft, "loading" );

上传发生在从我的 ui fragment 执行的保留 fragment (使用 asynctask)中。上传完成后,我的 ui fragment 会在 onActivityResult 上收到通知,目前它试图关闭对话框。在过去,它通过在 onActivityResult 上完成的回调来委托(delegate)关闭加载对话框的责任,但它也不起作用。

我可以在我的 Activity 在前台时关闭此对话框,但在后台时我会收到 IllegalStateException:在 onSaveInstaneState 之后无法执行此操作。我尝试使用 onRemove,这不会使我的应用程序崩溃,但也不会隐藏 DialogFragment。我已经在我的 ui fragment 和我的 Activity 上完成了这两项工作,但仍然遇到问题。

我一直在阅读文档,但找不到可以使用的方法。

DialogFragment 是不是不应该像我需要的那样使用或者我应该怎么做?

最佳答案

我只是设法用一个肮脏的解决方法解决了这个问题:

我捕获了 IllegalStateException 并将标志设置为 true,因此当我的 Fragment 返回时我知道我试图关闭。

//All this code is inside my ui Fragment
@Override
public void onResume() {
super.onResume();
final boolean kill = getArguments().getBoolean(ARG_KILL_LOADING, false);
if ( kill ) {
final DialogFragment df = ( DialogFragment )
getFragmentManager().findFragmentByTag( "loading" );
if ( df != null ) {
df.dismiss();
}
}
}


//Here I got workerfragment result and try to dismiss my DialogFragment
@Override
public void onActivityResult( int requestCode, int resultCode, Intent data ) {

super.onActivityResult(requestCode, resultCode, data);

try {
final DialogFragment df = ( DialogFragment ) getFragmentManager().findFragmentByTag( "loading" );
if ( df != null ) {
df.dismiss(); //Let's throw an IllegalStateException if on background!
}
} catch( IllegalStateException ex ) {
//dirty way to avoid crashing while on background:
//we will ask our ui fragment to dismiss df when ui fragment comes back onResume
getArguments().putBoolean(ARG_KILL_LOADING, true);
}

//Do something on ui with workerfragment result

}

但我仍然想知道在后台时关闭 FragmentDialog 的正确方法是什么。我有另一个项目有同样的问题:/

关于android - 在后台 Activity 时关闭 DialogFragment(支持库)获取 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com