我正在使用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.
答案 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()
....
}
虽然有更好的方法来处理这种情况