public boolean isShowing() {
return mDecor == null ? false : mDecor.getVisibility() == View.VISIBLE;
}
Dialog 判断isHidden ,官方源码方法与实际不符,有bug,日志如下(此时我已经调了dialog.hide(),界面也已隐藏):
2022-05-19 12:57:35.844 12362-12362/com.example.FirstActivityActivity: isShowing=true
以下参考来自,感谢:http://cn.voidcc.com/question/p-nkfwraut-pe.html
<article style="box-sizing: border-box; display: block; margin: 10px 0px;">
4 我想一个安卓:FragmentTransaction隐藏不为DialogFragment
fragmentTransaction.hide(myDialogFragment);
fragmentTransaction.addToBackStack(null);
添加到FragmentTransaction,这样当用户点击后退按钮,对话框将重新出现的工作,但它不工作。我本来推翻onCreateDialog在我DialogFragment,但我注意到,对于hide呼叫FragmentTransaction文档指出:
这仅仅是片段,其观点已被添加到一个容器 相关。
因此,现在我重写onCreateView。现在它有点隐藏,但不是真的。对话只是枯萎,但窗户仍然黑暗。我必须打开后退按钮才能摆脱它,显然这不是我想要的行为。我在这里错过了什么?
2012-02-08 Christopher Perry
</article>
A
回答
<article class="board-top-1 padding-top-10" style="box-sizing: border-box; display: block; margin: 10px 0px; padding-top: 10px; border-top: 1px solid rgb(221, 221, 221);">
8
一个DialogFragment
内部维护一个对话框,并要求根据其自己的生命周期显示和隐藏它的方法。调用FragmentTransaction.hide()
只是试图设置片段的视图的知名度,深受Fragment.onCreateView()
返回的,要View.GONE。 DialogFragment的视图恰好是用于其内部对话框的视图,因此您正在做的是将内容隐藏在对话框中。不幸的是,隐藏视图不会“关闭”对话框,因此屏幕仍然会变暗。
当您拨打DialogFragment.show(FragmentTransaction,String)
时,会创建一个FragmentTransaction
将其添加到FragmentManager
。通常,显示对话框被认为是“活动”交易,然后解散它只是弹出适当的次数。如果您之间没有添加任何其他片段,则使用删除操作创建新的FragmentTransaction。如果我们可以访问这个,那么我们可以添加一个backstack入口并使这个操作可逆。不幸的是,这是不可能的,所以我们能做的最好的就是让我们自己的解雇方法(和希望的内部状态不会太搞砸了):
public class UndoDialogFragmentActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// show a dialog fragment in the normal way
new MyDialogFragment().show(getSupportFragmentManager(), "dialog");
}
});
}
private static class MyDialogFragment extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, getTheme());
// do not allow back button to dismiss dialog; confusing behaviour otherwise!
setCancelable(false);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("Dismiss");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// pressing back after 'dismissing' the dialog will cause it to be added again
getFragmentManager().beginTransaction().remove(MyDialogFragment.this).addToBackStack(null).commit();
}
});
return button;
}
}
}
点击片段中的按钮会使用自己的解除按钮打开DialogFragment。按下解除后,您可以通过按下后退键再次显示对话框,撤消删除操作。当您允许后退键显示和隐藏对话框时,这会产生一些有问题的行为,但细节可以由您根据您的应用程序决定。
2012-03-16 22:28:05 antonyt
+1
我有这个奇妙的问题。(回 - >新片段),它是由注释解决的BeginTransaction()在我的代码删除。不能underestand为什么回到'撤消'删除操作。请解释我! – <small style="box-sizing: border-box; font-size: 13px;">2013-07-05 10:12:51</small>
</article>
<article class="board-top-1 padding-top-10" style="box-sizing: border-box; display: block; margin: 10px 0px; padding-top: 10px; border-top: 1px solid rgb(221, 221, 221);">
4
我可以通过我的DialogFragment内调用从getDialog().hide()
躲DialogFragment的对话框。
2012-09-18 22:07:47 villagecodesmith
</article>
<article class="board-top-1 padding-top-10" style="box-sizing: border-box; display: block; margin: 10px 0px; padding-top: 10px; border-top: 1px solid rgb(221, 221, 221);">
1
如果您使用API Level 11
或更高版本,你可以简单地调用dismiss()
在DialogFragment
,无论是从FragmentActivity
或DialogFragment
本身。
</article>
-----------------------------End-----------------------------
网友评论