gpt4 book ai didi

Android 操作栏 'back' 导致 OnDestroy 但设备 'back' 按钮在退出首选项 Activity 时不会

转载 作者:行者123 更新时间:2023-11-29 21:06:05 25 4
gpt4 key购买 nike

我有一个带有 Activity 的应用程序。在 Activity 中,我使用对话框 fragment 设置一些局部变量(这些变量确实有默认值)。我还有一个带有“三点”图标的操作栏,允许用户设置一些首选项(共享首选项)。

所有这些都有效(即通过对话框正确设置变量,通过 PreferenceActivity 设置共享首选项)但是我遇到了一个生命周期问题:

当我使用对话框设置局部变量,然后通过操作栏三点图标 > 设置更改共享首选项时,在应用程序中完成这些设置编辑后,我会看到两种不同的结果: 1. 如果我使用手机 (Google Nexus 5) 上的“后退”按钮,我所有的局部变量都会像我希望的那样被保留。 2. 如果我使用顶部操作栏中的“后退”按钮,我的局部变量将被重置为默认值。

调试时,我看到当我在首选项屏幕中点击操作栏“后退”按钮时,正在执行原始 Activity 的 OnDestroy 方法,并且正在重新执行 OnCreate。所以最重要的是,我知道为什么要重新设置我的变量(因为我的原始 Activity 和更新的局部变量正在被销毁并且正在创建一个新实例),但我不知道为什么操作栏“返回”功能似乎从根本上不同于手机的后退按钮。我曾尝试更改 list 中的启动模式,但这并没有改变行为。我也遍历了互联网/android 开发者网站,但似乎找不到任何东西。

我可以解决这个问题,但我真的很想能够使用操作栏后退按钮,因为我认为它更直观,并且希望它的行为类似于手机的后退按钮。任何帮助/解释都会很棒!

主要 Activity (为简洁起见,已删除不相关的代码):

    public class fretboard_flashcards extends FragmentActivity implements OnClickListener {
public static final int RESULT_SETTINGS = 0;
[declare local variables here and set to default values]

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
[update local variables here via FragmentManager - this works just fine]
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.settings_fretboard_flashcards, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent i = new Intent(this, settings_activity_fretboard_flashcards.class);
startActivityForResult(i, RESULT_SETTINGS);
break;
}
return true;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==RESULT_SETTINGS)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
handPosition = sharedPreferences.getString("pref_handPosition", "0");
}
}
}

偏好 Activity :

    public class settings_activity_fretboard_flashcards extends PreferenceActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.settings);
}
}

最佳答案

操作栏按钮和设备按钮根本不同。实际的理念是操作栏按钮不是返回而是向上,即子 Activity 被销毁并返回到其层次父级。设备上的后退按钮就是那个后退按钮。它是您在应用程序中的导航历史记录的堆栈。就像浏览器中的后退按钮。这种行为实际上是由谷歌记录的。我不记得确切的链接。我会尽快发布链接。

找到链接 http://developer.android.com/design/patterns/navigation.html

关于Android 操作栏 'back' 导致 OnDestroy 但设备 'back' 按钮在退出首选项 Activity 时不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com