getTargetFragment 返回 Null

Ale*_*lex 1 android android-fragments

我的应用程序中有父片段和对话框片段。单击按钮父片段打开对话框片段。这是我的 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");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是 MyDialogFragment 类

public class MyDialogFragment extends DialogFragment {
..........
public MyDialogFragment() {
            parentFragment = (ParentFragment)getTargetFragment();

        }
...........
...........
}
Run Code Online (Sandbox Code Playgroud)

当 MyDialogFragment 类中的 getTargetFragment 总是返回 null 时。

Ank*_*wal 5

检查您的命令序列

MyDialogFragment newFragment = new MyDialogFragment(); // line 1
newFragment.setTargetFragment(ParentFragment.this, 0); // line 2
Run Code Online (Sandbox Code Playgroud)

在这里,您首先要创建一个新的 MyDialogFragment 对象。请记住此命令(第 1 行)将调用 MyDialogFragment 的构造函数。在此之后,您将设置目标片段(第 2 行)。

如果你看看你的 dialogFragment,

public MyDialogFragment() {
            parentFragment = (ParentFragment)getTargetFragment();    
}
Run Code Online (Sandbox Code Playgroud)

您正在尝试访问构造函数中的目标片段。因此目标片段将始终为空,因为您是在第 2 行中调用构造函数之后分配它的。尝试从其他方法访问它或将其作为参数传递给构造函数(这不是一个好习惯)。