我有一个名为AbstractEntryActivity
的抽象活动。两项活动ModifyEntryActivity
和AddEntryActivity
扩展了它。
我还有一个全球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是null。
以下是摘要活动的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
...
}
我不明白的是:
AddEntryActivity
和ModifyEntryActivity
上,onCreate是相同的(对super.onCreate的简单调用)ModifyEntryActivity
上,我在第二次调用时得到mApp.getList = null AddEntryActivity
中,mApp.getList返回正确的值。 等等,我再次尝试,但情况并非总是如此 我真的不明白这里发生了什么,为什么它总是表现不一样。 我不确切知道我改变了什么,但在今天之前,它工作正常。
N.B。如果我不更改图片,一切都很好,并且正确添加/修改了条目
请问你帮我找错了吗?
答案 0 :(得分:0)
我发现了什么问题。
当我启动拍摄/选择图片的意图时,我实际上离开了应用程序(我认为它被杀死了),当我回到它时,getApplication
检索到的应用程序再次被清除所有价值观。
为了解决这个问题,我必须覆盖方法onSaveInstanceState
才能将列表的值放入其中 - 并检索onCreate
或onRestoreInstanceState
中的值。之后,我可以再次使用getApplication().setList(myRetrievedList)
在我的应用程序中设置列表。为了记录,我将重写方法放在抽象活动中。
由于我想保留的数据是自定义列表,因此我必须实现Parcelable
,以便我可以将其放入捆绑包中。
我不知道这是否是解决这个问题的最佳方式,所以请随意提出更好的解决方案。