我的应用程序中有父片段和对话框片段。单击后,“父片段”按钮将打开“对话框片段”。这是我的ParentFragment类。
public class ParentFragment extends Fragment {
........
........
public class ButtonClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
MyDialogFragment newFragment = new MyDialogFragment();
newFragment.setTargetFragment(ParentFragment.this, 0);
newFragment.show(getFragmentManager(), "dialog");
}
}
}
这是MyDialogFragment类
public class MyDialogFragment extends DialogFragment {
..........
public MyDialogFragment() {
parentFragment = (ParentFragment)getTargetFragment();
}
...........
...........
}
当MyDialogFragment类中的getTargetFragment总是返回null时。
最佳答案
检查您的命令顺序
MyDialogFragment newFragment = new MyDialogFragment(); // line 1
newFragment.setTargetFragment(ParentFragment.this, 0); // line 2
在这里,您首先要创建一个新的MyDialogFragment对象。请记住,此命令(第1行)将调用MyDialogFragment的构造函数。之后,您将设置目标片段(第2行)。
如果您查看dialogFragment,
public MyDialogFragment() {
parentFragment = (ParentFragment)getTargetFragment();
}
您正在尝试访问构造函数中的目标片段。
因此,目标片段将始终为null,因为在第2行中调用了构造函数之后,您将对其进行赋值。尝试从其他方法访问它,或者将其作为参数传递给构造函数(这不是一个好习惯)。