有可能从Android对话框的一个子对话框中获取对该对话框的引用吗?
我正在使用FragmentStatePagerAdapter的FragmentActivity。在我的片段中,我在一些视图上设置了单击侦听器,这些视图通过显示对话框来响应。对话框布局是通过XML布局资源提供的,该布局中的一些按钮使用onClick属性触发FragmentActivity中的方法。这很好,当按钮被点击时,方法被正确调用 但是我想知道在调用onClick方法时如何获得对对话框的引用。我所拥有的只是单击的视图(按钮),它是对话框布局的子级。实际上我只想取消这个对话。我真的不想让对话变成某种全局的、静态的单例或其他什么,必须有一种更干净的方式。我将尝试用一些代码来说明这一点:有可能从Android对话框的一个子对话框中获取对该对话框的引用吗?,android,android-fragments,android-fragmentactivity,android-dialog,Android,Android Fragments,Android Fragmentactivity,Android Dialog,我正在使用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()
....
}