Android DialogFragment onResume无法访问视图?

时间:2013-08-28 14:00:23

标签: android android-fragments android-camera

我可能在错误的地方做这个,但是目前我有一个DialogFragment代表一个带有相机按钮的对话框(除其他外),我正在使用内置的相机应用程序(通过Intent调用)返回DialogFragment的onActivityResult()。

这一切都很好,但我的目标是在对话框中找到一个附件LinearLayout,并基本上将捕获的图像的副本附加到它。例如你需要一些照片,它们出现在对话框的“附件”部分。

问题似乎是当DialogFragment的onActivityResult()被触发时,我无法得到它的视图,它是null:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == Activity.RESULT_OK) {
               try {
                  LinearLayout attachments = (LinearLayout) getView().findViewById(R.id.landmarkAttachmentView); // <- getView() is null

我在一个调试日志中输入了一些我认为可能在相机返回时触发的可疑方法,这些方法有DialogFragment的视图可用,但没有记录:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d(TAG, "Creating landmark dialog view");
    if(getView() == null) Log.d(TAG, "No view!");
    return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void show(FragmentManager manager, String tag) {
    Log.d(TAG, "Show landmark dialog view");
            if(getView() == null) Log.d(TAG, "No view!");
    super.show(manager, tag);
}

@Override
public void onViewStateRestored(Bundle savedInstanceState) {
    Log.d(TAG, "Restored landmark dialog view");
            if(getView() == null) Log.d(TAG, "No view!");
    super.onViewStateRestored(savedInstanceState);
}

public void onResume() {
    Log.d(TAG, "Resume landmark dialog view");
            if(getView() == null) Log.d(TAG, "No view!");
    super.onResume();
}

@Override
public void onStart() {
    Log.d(TAG, "Start landmark dialog view");
            if(getView() == null) Log.d(TAG, "No view!");
    super.onStart();
}

仅触发onStart和onResume,但this.view为null。从另一个活动/片段返回后,如何获取我的DialogFragment视图?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要覆盖onCreateView(),在那里创建视图并将其返回。然后它也可以在其他方法中使用。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.<your_view_layout>, container, false);
}

以下是更多文档和示例: http://developer.android.com/reference/android/app/DialogFragment.html