5

我有一个主要活动和一个preferenceActivity。在我的第一个活动中,我调用menu并通过调用startActivityForResult继续进行preferenceActivity。如何从首选项屏幕返回主要活动?

   case R.id.settings: 
       startActivityForResult(new Intent(this, SettingsActivity.class), LAUNCH_SETTINGS); 
       return true; 

然后我更改我的设置,并希望返回主要活动并查看应用了新设置的主要活动。在的onPause()方法做如下(我右明白当我按下后退按钮这个方法会被调用,对吧?)

@Override 
    protected void onPause() { 
     super.onPause(); 
     setResult(RESULT_OK, new Intent(this, MainActivity.class)); 
     finish(); 
    } 

在主要活动

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == LAUNCH_SETTINGS) { 
      if (resultCode == RESULT_OK) { 
       new RefreshList().execute(ACTION_SELECT); 
       Log.d(TAG, "On activity result"); 
      } 
     } 
    } 

但我acyncTask不打电话,日志不打印。我如何正确地做到这一点? 谢谢!

回答

12

在我的第一个活动中,我调用menu并通过调用startActivityForResult继续preferenceActivity。

使用startActivityForResult()PreferenceActivity是相当不寻常的。 PreferenceActivity旨在与startActivity()一起使用。如果启动PreferenceActivity的人关心首选项更改,则应该使用SharedPreferences对象注册首选项更改侦听器。

然后我更改我的设置并希望返回主要活动并查看应用了新设置的主要活动。

我建议您改用SharedPreferences.OnSharedPreferenceChangeListener。或者,只需在原始活动的onStart()onResume()方法中重新阅读您关心的偏好。

在的onPause()方法做如下(我右明白当我按下后退按钮这个方法会被调用,对吧?)

不,这是行不通的。 onPause()为时已晚,致电setResult()

+0

谢谢。将尽力做到这一点。 – 2010-10-15 14:17:31