2

我有一个名为AbstractEntryActivity. 两个活动ModifyEntryActivityAddEntryActivity扩展它。

我还有一个Application我用 调用的全局变量,我getApplication在其中放置了应该是全局的信息。一个列表,在我的情况下。

在我的抽象活动中,我称之为拍摄或挑选这样一张照片的意图:

public void onPickPicture(View view) {

    Intent pickIntent = new Intent();
    pickIntent.setType("image/*");
    pickIntent.setAction(Intent.ACTION_GET_CONTENT);

    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Intent chooserIntent = Intent.createChooser(pickIntent,
            getString(R.string.dialog_pick_picture_title));
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
            new Intent[] { takePhotoIntent });

    startActivityForResult(chooserIntent, Constants.SELECT_PICTURE);
}

我还有一种onActivityResult处理图片的方法。但是在被调用之前,方法onCreate被调用了。(有时会调用 onActivityResult 而不是 onCreate)

onCreate我的抽象活动的第一次调用中,我检查了我的应用程序列表的内容:它是好的(既不是空的,也不是空的)。现在,当我从画廊回来时,我调用 getApplication,而我放入其中的 List 为空。

这是我onCreate的抽象活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_add_entry);
   // Get all views ...
   ...
   mApp = (MyApplication) getApplication();
   Log.d(TAG, "mApp = "+mApp);
   Log.d(TAG, "mApp.getList() = "+mApp.getList()); // HERE it is NULL on 2nd call
   // Init date
   initDate();
   // Init all fields
   initFields() ;
   // getSupportActionBar
   ...
}

我不明白的是:

  • AddEntryActivityModifyEntryActivity上,onCreate 是相同的(对 super.onCreate 的简单调用)
  • On ModifyEntryActivity,我在第二次调用时得到 mApp.getList = null
  • 似乎大多数时候,在 中AddEntryActivity,mApp.getList 返回正确的值。等等,我又试了一次,但情况并非总是如此

我真的不明白这里发生了什么,以及为什么它的行为并不总是一样。我不确切知道我改变了什么,但在今天之前,它工作正常。

注意如果我更改图片,一切都很好,并且条目已正确添加/修改

你能帮我找出问题所在吗?

4

1 回答 1

0

我发现出了什么问题。

当我启动拍摄/挑选照片的意图时,我实际上离开了应用程序(我假设它已被杀死),当我回到它时,检索到的应用程序getApplication再次清除所有值。

为了解决这个问题,我必须重写该方法onSaveInstanceState,以便将列表的值放入其中 - 并检索其中一个onCreate或 in 中的值onRestoreInstanceState。之后,我可以再次在我的应用程序中使用getApplication().setList(myRetrievedList). 作为记录,我将覆盖方法放在抽象活动中。

由于我要保留的数据是自定义列表,因此我必须将其实现Parcelable,以便我可以将其放入捆绑包中。

我不知道这是否是解决这个问题的最佳方法,因此请随时提出更好的解决方案(如果有)。

于 2013-08-11T09:09:58.707 回答