应用程序设置?我必须使用startActivity吗?

时间:2012-12-30 00:10:15

标签: java android

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

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

我对几件事感到好奇......我的理解是,如果我使用startActivity()方法,它将基本上擦除我当前的Activity并转到新的Activity。然而,在不太可能的情况下,用户在游戏中间执行此操作,我并不知道它在擦除所有内容。当用户点击BACK按钮时,我需要它继续停止的地方。

我应该如何完成这项工作?

2 个答案:

答案 0 :(得分:1)

您应该将“设置”活动作为PreferenceActivity(http://developer.android.com/reference/android/preference/PreferenceActivity.html)而不仅仅是正常的Activity,假设它不是太复杂。这实际上取决于您的首选项屏幕需要什么。

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(它将打开您的主要活动),然后一旦您返回,您将回到未更改的MainActivity。

如果这不是你正在寻找的方法,你将不得不使用onSaveInstanceState并在savedInstanceState!= null时在onCreate中恢复它。

答案 1 :(得分:0)

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

相关问题