我有一项活动让用户选择一个电话号码。当然,我希望我的班级能够记住所选联系人的ID,所以我将其保存在课程领域。但是当onActivityResult方法返回时,我的类变量被重置。这是我正在尝试做的事情:
Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
...
public void onActivityResult(int reqCode, int resultCode, Intent intent){
super.onActivityResult(reqCode, resultCode, intent);
switch(reqCode){
case(PICK_CONTACT):
if(resultCode == Activity.RESULT_OK){
Uri contactData = intent.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if(c.moveToFirst()){
contactName = c.getString(c.getColumnIndexOrThrow(People.NAME));
contactId = c.getInt(c.getColumnIndexOrThrow(People._ID));
break;
当我在此方法中设置断点时,contactName和contactId的值正如我所期望的那样,但是一旦方法返回,值就会以某种方式重置为默认值。很明显我错过了什么,但我不确定我做错了什么或遗忘。
谢谢!
伊娃
答案 0 :(得分:1)
Activity
可能被暂停并重新创建。基本上,如果您使用startActivityForResult
启动的Intent资源密集程度很高,则操作系统可能必须暂停您的Activity以释放资源。
所以它保存了它可以然后从Intent返回来调用onActivityResult
,它必须重新创建你的Activity。在这种情况下,任何实例变量都将被重置。
您可以通过重新启动设备或使用onSaveInstanceState
和onRestoreInstanceState
处理设备来解决此问题。
在这里阅读更多内容: Why oncreate method called after startActivityForResult?
答案 1 :(得分:0)
不确定您是否仍需要帮助。当您的活动重新启动时,onResume之前会调用onActivityResult。确保您没有在onResume中重置变量值。
当您的活动重新开始时,您将在onResume()之前立即收到此电话。
http://developer.android.com/reference/android/app/Activity.html#onActivityResult(int,int,android.content.Intent)
答案 2 :(得分:0)
打开新的“活动”时,您的配置可能正在更改。尝试在您的AndroidManifest活动中使用configChanges
。
android:configChanges="orientation|keyboardHidden|screenSize"