草庐IT

Android Fragment /DialogFragment不销毁只隐藏

想看烟花么 2023-03-28 原文

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不销毁只隐藏的更多相关文章

  1. Ruby隐藏与覆盖 - 2

    我刚刚了解到,在Java中,覆盖和隐藏之间是有区别的(静态方法是隐藏的,而不是覆盖),这意味着Java使用早期绑定(bind)和后期绑定(bind)。是否有与方法隐藏类似的东西,或者它只是具有方法重写? 最佳答案 Java具有三种不同的“方法”:实例方法,静态方法和构造函数。Ruby只有一个:实例方法。在Java中,静态方法的行为必须不同于实例方法,因为类不是对象。它们没有类,因此也没有父类(superclass),因此没有要覆盖的内容。在Ruby中,类与其他任何对象一样都是对象,它们具有一个类,该类可以具有父类(superclas

  2. ruby-on-rails - Rails 4 真实性 token - 在 header 和表单隐藏输入中? - 2

    我正试图在Rails中获得完整的页面缓存,但我在CSRF方面遇到了很大的障碍——或者可能只是我对它的理解。我目前有form_authenticity_token存储在cookie中的字符串,JS可以使用该cookie访问和重写header标签。我在生成的HTML中有两个地方可以找到标记:1)在头部2)在表单的隐藏输入元素中如前所述,这些哈希值彼此不同(在未启用缓存的开发模式下)。他们为什么不同?为什么我可以删除headmeta标签并保留表单输入并且允许请求​​?然而,当我删除表单输入标签并保留标题时,请求被拒绝了吗?实际上这意味着head标签是无用的,不是吗?我可以将表单输入标签重写为

  3. 驱动开发:内核无痕隐藏自身分析 - 2

    在笔者前面有一篇文章《驱动开发:断链隐藏驱动程序自身》通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分析一下他是如何实现的进程隐藏的,总体来说作者的思路是最终寻找到MiProcessLoaderEntry的入口地址,该函数的作用是将驱动信息加入链表和移除链表,运用这个函数即可动态处理驱动的添加和移除问题。MiProcessLoaderEntry(pDriverObject->DriverSection,1)添加MiProcessLoaderEntry(pDriverObject->DriverSection,

  4. ruby-on-rails - 在 Ruby on Rails 中隐藏字段 - 2

    我的数据库中有一个名为IP的字段,当他在我的Rails内置博客中发送消息时,我将用户IP(在#create方法中)放在该字段中。但是当我想以另一种格式(JSON)查看文章时,该字段是可见的。如何隐藏字段IP? 最佳答案 您可以在Controller中的格式block中执行此操作,如下所示:respond_todo|format|format.json{render:json=>@user,:except=>[:ip]}#orwithoutformatblock:@user.to_json(:except=>:ip)end如果你想普遍

  5. ruby - 为什么 Gosu 隐藏我的鼠标指针? - 2

    我正在使用Gosugem进行一些图形编程。问题是,当我创建一个窗口时,我的鼠标指针被隐藏了。我可以猜到鼠标在某个时刻的位置,我可以凭直觉点击,但我的用户可能不会。如何显示指针? 最佳答案 如果你想使用系统光标你可以这样做classWindow查看libgosu的文档RubyGosurdocReference/Window 关于ruby-为什么Gosu隐藏我的鼠标指针?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

  6. ruby-on-rails - 如何使用私有(private)提交隐藏提要? - 2

    在评估表单中有一个提交按钮和一个按钮。如果点击私有(private)提交,提交的信息将对查看个人资料的其他用户隐藏。我们怎样才能同时使用隐藏提交的信息以防止在提要上显示?activities/index.html.erbFeed#We'dneedtomake.public_valuationsworkwiththiswithoutgettinganundefinedmethoderror.activities_controller.rbclassActivitiesController为简洁起见,我将只包含_create(还有update和destroy)。每次用户提交估价时,它都会在

  7. ruby - 如何在 rails_admin 的编辑表单中隐藏 "Save and Add Another"按钮? - 2

    我在我的Rails应用程序中应用了rails_admingem。我想删除特定模型编辑表单中一些不必要的按钮,并添加我自己的自定义按钮。请查看屏幕截图,了解我要删除的内容。 最佳答案 @montells复制https://github.com/sferik/rails_admin/blob/master/app/views/rails_admin/main/_submit_buttons.html.haml这个页面在你的repo中,位于“views/rails_admin/main/_submit_buttons.html.haml”

  8. ruby - 当销毁失败时,我可以在事件管理员中有一个闪现消息吗? - 2

    在我的应用程序中,有些资源无法销毁。所以我这样写了我的模型:before_destroy:destroy_checkdefdestroy_checkifsome_reason?errors.add(:base,'cannotdestroythisresource!')enderrors.blank?end然后,当我在ActiveAdmin中单击销毁按钮时,没有任何显示:没有错误,没有消息,并且记录没有真正销毁。如何在销毁失败时显示错误消息? 最佳答案 首先使用模型的before_destroy回调来检查记录是否可以被销毁(这里如果学

  9. jquery - 自动隐藏 rails 中的 flash 消息 - 2

    我需要在ruby​​onrails中自动淡化flash消息。我的消息代码是:我如何自动淡化这些消息? 最佳答案 这应该适合您。您可以在括号内指定时间跨度。将此添加到您的Javascript。这对所有人来说都很常见:$(".alert").fadeOut(3000);对于警报成功:$(".alert-success").fadeOut(3000);对于警报危险:$(".alert-danger").fadeOut(3000); 关于jquery-自动隐藏rails中的flash消息,我们在

  10. ruby-on-rails - 销毁用户模型后,无法重新添加用户模型 - 2

    所以我在Rails上工作,对我的用户模型感到有点沮丧,所以我销毁了它(我也在使用设计,这可能是错误的来源)。在我的辩护中,我感到疲倦、沮丧,而且有点微醺。我尝试使用简单的railsgscaffolduserfirst:textlast:text将其添加回去,但在尝试生成模型时出现以下错误。我该如何修复这一切备份?/home/action/.rvm/gems/ruby-2.0.0-p247/gems/activesupport-4.0.0/lib/active_support/inflector/methods.rb:226:in`const_get':uninitializedcons

随机推荐