问题标签 [android-dialogfragment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 当活动在后台时关闭 DialogFragment(支持库)获取 IllegalStateException
在我的应用程序的活动中,我需要在上传内容时显示“正在加载”不可取消的 FragmentDialog。我从当前活动中的回调中显示此对话框,如下所示:
上传发生在从我的 ui 片段执行的保留片段中(使用 asynctask)。上传完成后,我的 ui Fragment 会在 onActivityResult 上收到通知,当前它会尝试关闭对话框。在过去,它通过在 onActivityResult 上完成的回调来委托解除加载对话框的责任,但它也不起作用。
当我的活动在前台时,我可以关闭此对话框,但在后台时,我得到一个 IllegalStateException:在 onSaveInstaneState 之后无法执行此操作。我尝试使用 onRemove,这不会使我的应用程序崩溃,但也不会隐藏 DialogFragment。我已经在我的 ui Fragment 和我的活动上做了这两件事,但仍然有问题。
我一直在阅读文档,但找不到可以使用的方法。
DialogFragment 不应该像我需要的那样使用还是我应该怎么做?
android - 显示 DialogFragments 会导致 ICS 崩溃
在 Fragments API 发布后,我开始使用兼容性包将所有已弃用的对话框移植到 DialogFraments 中。一切都运行良好,直到我注意到我的对话框仅导致 ICS 崩溃:
我的对话框显示在 AsyncTask.onPostExecute() 上,以便向用户显示 http 响应。深入研究问题后,我得出的结论是,这个异常只在Activity暂停或停止时发生,在其他版本的Android上不会发生。我尝试过使用 commitAllowingStateLoss(),但没有帮助,因为异常是在 DialogFragment.show() 上引发的。这是我的 DialogFragment 代码:
这是ICS的一个错误吗?我应该做些什么?
android - 回到 FragmentActivity 后出现 IllegalStateException
这是关于我发现我的应用程序面临的一个经常性问题,并且与使用几个 DialogFragment 相关。我主要针对平台级别 8 设备,因此要使用 DialogFragments 我必须使用兼容性库。
每当我退出应用程序并且他们回来时,问题本身就会发生。这是堆栈跟踪:
这是我精简到最小的 MainActivity。
showNewChannelFragmentDialog() 方法仅在用户选择特定菜单选项时调用,所以我认为 DialogFragment 本身的内容在这里无关紧要。
但是您可以看到我完全按照此处显示的内容进行操作,并且确实有效,正如我之前所说的,问题是每当我的应用程序在用户离开后恢复正常时。
有什么建议么?我正在考虑删除片段并仅使用常规对话框。
android - 关闭 DialogFragment(不是 Dialog)onTouchOutside
我已经搜索了有关关闭 Dialog onTouchOutside的所有答案,但是,我在我的应用程序中使用了 DialogFragment。当用户在DialogFragment区域之外单击时,如何实现关闭DialogFragment。
我检查了Dialog的setCanceledOnTouchOutside的源代码
还有另一个可能很有趣的函数isOutOfBounds
但我想不出一种将这些用于DialogFragment的方法
除了这些,我还使用hierarchyviewer检查了应用程序的状态, 据我所知,我只能看到对话框的区域,而不是它的外部部分(我的意思是DialogFragment之后的屏幕剩余部分)。
您能否建议一种为DialogFragment实现此setCanceledOnTouchOutside的方法,并在可能的情况下使用示例代码?
android - 使用 weightSum 时,Android 片段对话框似乎忽略 layoutMargin 或 layoutWidth
所以我有我在按钮按下时创建的 DialogFragment 用于选择一些信息。
如果我使用 weightSum 似乎无论我做什么,即使我指定了父布局的 layoutMargin 或宽度,diaglog 也会填满屏幕。
这是在运行 3.2 并使用默认片段库而不是兼容性的 Galaxy Tab 上。
任何的意见都将会有帮助。
谢谢
下面是我正在使用的布局。
android - DialogFragment 设置Dialog的高度
我刚刚使用了第一个 Dialog 使用 DialogFragment 创建的。一切都很好,除了我无法让对话框包装它的布局。我的布局将所有元素的高度设为wrap_content
.
在MyFragmentDialog
我什至找不到暗示它可以用来设置高度的方法FragmentDialog
。我错过了什么?如何使 DialogFragment 适合它的内容?
的方法DialogFrament
:onCreateView
这是布局:
谢谢,
android - 如何从处理程序显示 DialogFragment
我有一个处理程序,它在收到特定消息时显示一个 DialogFragment。这通常有效,但如果片段已被保存,我会收到以下错误:
E/AndroidRuntime(3898):致命异常:主要 E/AndroidRuntime(3898):java.lang.IllegalStateException:onSaveInstanceState 后无法执行此操作 E/AndroidRuntime(3898):在 android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1299) E/AndroidRuntime(3898): 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310) E/AndroidRuntime(3898): 在 android.support.v4.app.BackStackRecord .commitInternal(BackStackRecord.java:541) E/AndroidRuntime(3898): 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525) E/AndroidRuntime(3898): 在 android.support.v4.app .DialogFragment.show(DialogFragment.java:123) E/AndroidRuntime(3898): 在 com.malauzai.app.BaseActivity$2.handleMessage(BaseActivity.java:72) E/AndroidRuntime(3898): 在 android.os。Handler.dispatchMessage(Handler.java:99)
现在,我知道这是预期的,基于 FragmentManager.beginTransaction 的 Javadoc:
注意:片段事务只能在活动保存其状态之前创建/提交。如果您尝试在 Activity.onSaveInstanceState() 之后(以及在随后的 Activity.onStart 或 Activity.onResume() 之前提交事务,您将收到错误消息。这是因为框架负责将您当前的片段保存在状态中,如果在保存状态后进行更改,那么它们将丢失。
我的问题是我不知道如何防止它。我试过打电话Handler.removeMessages()
,onPause()
但它仍然会发生。我已经尝试设置一个标志onSaveInstanceState()
并且如果设置了该片段则不显示该片段,但它仍然会发生。这似乎是一个很常见的问题,但我想不出一个可行的解决方案。基本上,我怎么知道片段已经被保存了?
顺便说一句,这发生在我的 BaseActivity(扩展 FragmentActivity)上,但每个活动都有自己的处理程序,所以我不认为这应该是一个问题。
我最后的想法是使用Fragment.commitAllowingStateLoss()
,但这似乎是一个 hack。
编辑: 这是导致我出现问题的代码:
android - DialogFragment 中的可点击超链接
这是我在 MainActivity 类中创建 AlertDialog 的静态内部类:
当您按下 MainActivity 中的菜单项时,我会显示它:
我正在尝试使用注释行使消息文本中的链接可点击。
我在这里找到了这种方法,并且在使用常规对话框(无片段)时对我有用。
但是,这是我第一次尝试在 DialogFragment 上使用它,并且在尝试查找视图时总是得到 NullPointerException。
我也尝试过aboutFragment.getView().findViewById(android.R.id.message)
,但这也返回 null 。
也许我太早/在错误的地方调用代码?
任何想法都会很棒!
编辑:刚刚在 onCreateView() 中尝试过((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
,并且
((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
在 onCreateDialog() 中也尝试过,但没有成功。
仍然收到空指针异常...
android - Android:FragmentTransaction 隐藏对 DialogFragment 不起作用
我正在尝试添加一个
到FragmentTransaction以便当用户点击后退按钮时对话框将重新出现,但它不起作用。我最初在 DialogFragment 中覆盖了 onCreateDialog,但我注意到有关 FragmentTransaction 的隐藏调用的文档指出:
这仅与视图已添加到容器中的片段相关。
因此,现在我将覆盖 onCreateView。现在它有点隐藏,但不是真的。对话框只是缩小了,但窗口仍然是黑暗的。我必须点击后退按钮才能摆脱它,这显然不是我想要的行为。我在这里想念什么?
android - DialogFragment 没有被删除
我使用此代码创建了一个 DialogFragment
其中 AlertDialogFragment 是一个简单的 DialogFragment 类,它创建新的 AlertDialog.Builder(..)。
然后我想删除对话框
但是,在最后一条 Log.d 消息中,我仍然得到该片段(即getSupportFragmentManager().findFragmentByTag(dialogTag)
不为空,但返回有效片段)。
如何强制立即删除对话框?这对我来说很重要,因为我有在这个函数之后执行的代码,它会检查对话框是否存在,然后什么都不做,如果不存在,则重新创建它。但是,它永远不会重新创建它,因为getSupportFragmentManager().findFragmentByTag(dialogTag)
返回 valid DialogFragment
。
我正在使用Android兼容包,Android 2.2版