Android Fragment /DialogFragment

2022-05-19  本文已影响0人  想看烟花么

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,无论是从FragmentActivityDialogFragment本身。

来源

</article>
-----------------------------End-----------------------------

我也是有底线的,感谢您的耐心阅读,欢迎支持与点赞。
上一篇 下一篇

猜你喜欢

热点阅读