0

我可能在错误的地方执行此操作,但目前我有一个 DialogFragment 表示带有相机按钮(除其他外)的对话框,并且我正在使用返回到的内置相机应用程序(通过 Intent 调用) DialogFragment 的 onActivityResult()。

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

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

@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 为空。从另一个活动/片段返回后,如何获取 DialogFragment 的视图?

谢谢!

4

1 回答 1

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

于 2013-08-28T14:05:18.453 回答