1

我终于完成了我正在开发的应用程序。这是一个篮球记分牌应用程序。它完全按预期工作,但在开发阶段我已经硬编码了所有变量。这对我来说很好,但如果这个应用程序对其他人有用,那么一些变量需要能够更改。

我认为最好的方法是使用选项菜单。当用户单击菜单中的“设置”选项时,我的菜单出现在屏幕上。我创建了一个名为 SettingsActivity 的新 Activity,并且能够使用 startActivity(R.layout.settings) 方法显示这个 XML 布局。但是当我单击设备上的 BACK 按钮时,它会退出程序。

我对几件事感到好奇......我的理解是,如果我使用 startActivity() 方法,它将基本上删除我当前的活动并转到新的活动。但是,在不太可能的情况下,用户在游戏中间这样做,我不认为它会抹去一切。当用户点击 BACK 按钮时,我需要它从停止的地方继续。

我应该如何去完成这个?

4

2 回答 2

1

您应该将“设置”活动作为 PreferenceActivity (http://developer.android.com/reference/android/preference/PreferenceActivity.html) 而不是普通的活动,假设它不是太复杂。这真的取决于你的偏好屏幕需要什么。

public class Prefs extends PreferenceActivity{

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     addPreferencesFromResource(R.xml.preferences);
 }
}

在您的 res/menu 文件夹中,您可以有一个 menu.xml 对应于用户按下菜单按钮时将显示的内容:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/miPrefs" android:title="Preferences" android:icon="@android:drawable/ic_menu_preferences"></item>
</menu>

然后你可以把它与你的主要活动联系起来:

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

然后最后,在您的主要活动中,您可以添加以下内容:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item){
  switch(item.getItemId()){
  case R.id.miPrefs:
    startActivity(new Intent().setClass(this,Prefs.class));
    break;
  }
}

整个过程将允许您打开一个 PreferenceActivity(它将在您的 Main Activity 上打开),然后一旦您返回,您将回到未更改的 MainActivity。

如果这不是您要寻找的方法,则必须使用 onSaveInstanceState 进行操作,并在 saveInstanceState != null 时在 onCreate 中恢复它。

于 2012-12-30T04:41:36.960 回答
0

我首先假设您在指向您的新类/新活动而不是 XML 布局的 Intent 上使用 startActivity。如果您想保存一些数据,请在 onpause 方法中使用 sharedpreferences ,您可以重新加载 onresume 但它应该保留,除非它被您或 Android 关闭(如果内存不足)。

于 2012-12-30T00:19:31.180 回答