美文网首页
Android Fragment /DialogFragment

Android Fragment /DialogFragment

作者: 想看烟花么 | 来源:发表于2022-05-19 09:13 被阅读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-----------------------------

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

    相关文章

      网友评论

          本文标题:Android Fragment /DialogFragment

          本文链接:https://www.haomeiwen.com/subject/yszzurtx.html