是否有可能从其中一个孩子那里获得对Android Dialog的引用?

时间:2014-01-30 22:48:03

标签: android android-fragments android-fragmentactivity android-dialog

我正在使用FragmentActivity和FragmentStatePagerAdapter。在我的片段中,我在一些通过显示Dialog来响应的视图上设置了单击侦听器。 Dialog布局是通过XML布局资源提供的,此布局中的某些按钮使用onClick属性来触发FragmentActivity中的方法。并且工作正常,单击按钮时可以正确调用该方法。

但是我想知道在调用onClick方法时如何获取对Dialog的引用。我所拥有的只是被点击的视图(按钮),它是Dialog布局的子项。我其实只想解雇对话框。我真的不想让Dialog成为某种全球性,静态的单身或其他什么,必须有一种更清洁的方式。我将尝试用一些代码来说明它:

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 ???
    }
    ...
}

...和Dialog布局XML:

<GridLayout ...>

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

1 个答案:

答案 0 :(得分:1)

不,不是你这样做的方式,因为对话仅在点击后才存在。但是,如果将声明移动到成员变量,则为yes(如下所示)

 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()
      ....
   }

虽然有更好的方法来处理这种情况