我的应用程序中有父片段和对话框片段。单击后,“父片段”按钮将打开“对话框片段”。这是我的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行中调用了构造函数之后,您将对其进行赋值。尝试从其他方法访问它,或者将其作为参数传递给构造函数(这不是一个好习惯)。

08-03 17:43