切换回首选项后不调用onCreate

时间:2017-05-03 14:07:10

标签: android android-preferences

我的应用只有两项活动:mainpreferences

PreferenceActivity(或我的情况SettingsActivity)中,用户可以更改一些影响MainActivity的内容。

这是我的SettingsActivity

public class SettingsActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public static class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }

        @Override
        public boolean onPreferenceChange(Preference preference, Object value) {
            return false;
        }
    }
}

现在我有两个问题:

  1. 当用户按下HomeButton时,主屏幕似乎不会调用onCreate,因此更改的首选项不会加载到主活动中。我需要更改什么,告诉android调用onCreate函数?
  2. 由于android nougat有这些"活动 - 更改 - 动画"所以当切换到新活动时,新屏幕类型为slides in。但是,当用户按下HomeButton时,预期的动画将是slide out,但它也是slide in。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

第一期的解释:

onCreateonResume

之间存在差异

onCreate:首次推出活动。您可以在这里初始化您的资料 onResume:用户在另一个活动进入后台后返回活动。 (在其他活动上调用onPause)

对于第二个问题,请尝试:

Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);

而不是

NavUtils.navigateUpFromSameTask(this);