有可能从Android对话框的一个子对话框中获取对该对话框的引用吗?

有可能从Android对话框的一个子对话框中获取对该对话框的引用吗?,android,android-fragments,android-fragmentactivity,android-dialog,Android,Android Fragments,Android Fragmentactivity,Android Dialog,我正在使用FragmentStatePagerAdapter的FragmentActivity。在我的片段中,我在一些视图上设置了单击侦听器,这些视图通过显示对话框来响应。对话框布局是通过XML布局资源提供的,该布局中的一些按钮使用onClick属性触发FragmentActivity中的方法。这很好,当按钮被点击时,方法被正确调用 但是我想知道在调用onClick方法时如何获得对对话框的引用。我所拥有的只是单击的视图(按钮),它是对话框布局的子级。实际上我只想取消这个对话。我真的不想让对话变成

我正在使用FragmentStatePagerAdapter的FragmentActivity。在我的片段中,我在一些视图上设置了单击侦听器,这些视图通过显示对话框来响应。对话框布局是通过XML布局资源提供的,该布局中的一些按钮使用onClick属性触发FragmentActivity中的方法。这很好,当按钮被点击时,方法被正确调用

但是我想知道在调用onClick方法时如何获得对对话框的引用。我所拥有的只是单击的视图(按钮),它是对话框布局的子级。实际上我只想取消这个对话。我真的不想让对话变成某种全局的、静态的单例或其他什么,必须有一种更干净的方式。我将尝试用一些代码来说明这一点:

public class MyFragment extends Fragment {
    ...
    ...
    @Override
    public View onCreateView(...) {
        ...
        dialogTrigger.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View src) {
                MyDialog dialog = new MyDialog(src.getContext());
                dialog.show();
            }
        });
    ...
}

public class MyActivity extends FragmentActivity {
    ...
    public void doIt(View src) {
        // dialog ref ???
    }
    ...
}
…以及对话框布局XML:

<GridLayout ...>

    <Button
        ... 
        android:onClick="doIt" />
...
etc.

...
等

不,不是您的操作方式,因为该对话框只在单击后存在。但是,如果将声明移动到成员变量,则为“是”(如下所示)


有更好的方法来处理这种情况,尽管

您是否建议我将对话框设置为静态,并包含一个用于检索对话框引用的静态类方法?我在那里尝试过,它确实有效,但我担心生命周期。我应该吗?。至于TODO,我没有调用doIt方法。当对话框中的视图被单击时,框架会调用它。所以在doIt中,我只想关闭对话框,然后做一些其他的事情。是的,我知道它是从XML调用的,这就是为什么我建议它,因为看起来你不能确定dialogTrigger是否被点击了。如果它应该已经打开了,只需确保你做了一个空检查以确保安全好吧,那么它肯定被调用了,不管怎样,日志显示了这么多。我当然更喜欢你的建议,但我不确定如何去做。我的碎片没有ID。我使用的是ViewPager和FragmentStatePagerAdapter,因为片段的数量未知且可能很大。我有一个XML布局文件,在根目录下有一个RelativeLayout,它被膨胀并用作每个片段的内容。所以,我不确定我应该引用什么?我想我需要的是当前活动的片段…这确实有帮助,抱歉耽搁了。
 public class MyFragment extends Fragment {

    private MyDialog dialog;

    @Override
    public View onCreateView(...) {
        ...
        dialogTrigger.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View src) {
                dialog = new MyDialog(src.getContext());
                dialog.show();
           }
        });
        ...

       protected MyDialog getDialog() {
           return dialog.
       }
   }

   public class MyActivity extends FragmentActivity {

   public void doIt(View src) {
      //TODO: seems you want to do this too (?):  dialogTrigger.callOnClick();
      //EDIT: oops i missed the following the first time
      MyDialog dialog = ((MyFragment)getSupportFragmentManager().findFragmentById(R.id.my_fragment)).getDialog()
      ....
   }