【问题标题】:android: How can i close fragment when the user touch outside of it?android:当用户触摸片段外部时,我如何关闭片段?
【发布时间】:2012-11-22 09:02:12
【问题描述】:

大家好 =) 我是一名新的 android 开发人员,我需要关于关闭片段的帮助。

我的应用程序有一个登录片段,当用户触摸它的外部时,我想隐藏登录片段。我怎么能做这个? OnTouchEvent() 方法是否有用?

请说点什么。谢谢=)

【问题讨论】:

  • 如果您使用的是 DialogFragment,您可以使用此处发布的答案:stackoverflow.com/questions/8404140
  • 谢谢,但它不是 DialogFragment..
  • 为什么不使用对话片段?无论如何,这似乎更有意义,因为您希望它看起来像一个对话框并表现得像一个..
  • 是的,它似乎更有用,我尝试了一下,但我的应用程序崩溃,并出现对话框片段的错误非法状态异常。

标签: android android-fragments android-lifecycle


【解决方案1】:

将登录布局放置在透明的全屏布局中,并在较大的布局上检测触摸事件。

【讨论】:

    【解决方案2】:

    我认为更好的方法是删除片段以释放内存资源。

    我的解决方案是在片段中使用此方法:

    private void closeFragment() {
            getActivity().getSupportFragmentManager().beginTransaction().remove(YOUR_FRAGMENT.this).commit();
        }
    

    【讨论】:

      【解决方案3】:

      再次嗨 =) 我在主页活动中使用 OnTouchListener 解决了这个问题。我的主页布局中有一个 gridviews 背景,如果用户没有登录,onTouch() 方法运行。当登录片段可见并且用户触摸它之外的我的 hideLoginFragment() 方法调用以关闭片段..

      gridView = (ShelvesView) findViewById(R.id.grid_shelves);
      gridView.setOnTouchListener(new OnTouchListener() {
      
                  @Override
                  public boolean onTouch(View v, MotionEvent event) {
                              if (application.getDbManager().getUser().key.equals("-1")){
                          hideLoginFragment();
                          loginButton.setVisibility(View.VISIBLE);
                          exitButton.setVisibility(View.INVISIBLE);}
                      return false;
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-11
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 2015-04-06
        相关资源
        最近更新 更多