2012-12-30 32 views
1

我终于完成了我正在开发的应用程序。这是一款篮球记分牌应用程序。它的工作原理与预期完全相同,但在开发阶段,我对所有变量进行了硬编码。这对我来说很好,但如果这个应用程序对其他人有用,那么某些变量需要能够被更改。应用程序设置?我必须使用startActivity吗?

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

我很好奇几件事......我的理解是,如果我使用startActivity()方法,它将基本上抹去我目前的活动并转到新的活动。然而,在不太可能的情况下,用户会在游戏过程中做到这一点,但我不会将它全部抹去。我需要它继续从用户点击返回按钮时离开的地方。

我应该如何去做到这一点?

回答

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.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中。

+0

您认为这比使用内置于Android的SharedPreferences方法更好吗? –

+0

这使用共享首选项,但会自动为您设置屏幕。如果你有足够的风格,他们应该以这种方式进行设置。 – snotyak

+0

非常感谢...最近几天我一直很忙,直到现在还没有机会看到这个。我做的和你几乎一样,但是我把它扩展为常规活动。问题:'addPreferencesFromResource(R.xml.preferences;' - 我在xml下得到一个红线。R下没有资源用于xml。 –

0

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

+0

我还没有做任何事情。我在阅读主题时看到了startActivity()方法(SO上的其他帖子)。我目前只尝试使用setContentView(R.layout.settings)。这是有效的,但我不确定实际发生的事情正在运行的前一个布局。 –

相关问题