假设我有10个按钮,ID为1,2,...,10。我有一个名为preferences.xml的XML文件,其中包含一个复选框:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:key="applicationPreference" android:title="@string/config">
<CheckBoxPreference
android:key="checkbox" />
</PreferenceScreen>
我的按钮都调用相同的函数,该函数调用了启动PreferenceActivity的意图。
我想要做的是用每个按钮调用相同的模型,但保存每个按钮的复选框的值。目前,每次单击按钮时,它都会启动活动,但是,例如,我的按钮1的值将在我的按钮5的值中找到。
我应该使用SharedPreferences还是别的什么?
我知道这是可能的,但由于我仍然不熟悉许多概念,我只是找不到它。
答案 0 :(得分:0)
如果我理解正确,你必须告诉PreferenceActivity
按哪个按钮。您可以通过在启动活动时将按钮ID设置为参数来实现此目的。
/*
* This is the common method used by all the buttons after the click
* was done in order to start the PreferenceActivity and pass
* the button id as a parameter
* @param sender - Button which was pressed and will start the
* PreferenceActivity
*/
private void startPreferenceActivity(Button sender)
{
// create the intent
Intent intent=new Intent(context, PreferenceActivity.class);
// add button id as a parameter
intent.putExtra("buttonID", sender.getId());
// start activity
startActivity(intent);
// or you can start it to way for a result
// startActivityForResult(intent, 0);
}
现在,在PreferenceActivity
中你必须得到你发送的参数:
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get the extras where the parametrs are stored
Bundle bundle = getIntent().getExtras();
if(bundle.getInt("buttonID") != null)
{
// get id as int with default value as 0
int id= intent.getInt("buttonID", 0);
}
if(bundle.getString("buttonID") != null)
{
// get id as string with default value as ""
string id= intent.getString("buttonID", "");
}
// other code here ...
}
希望这会对你有所帮助。
答案 1 :(得分:0)
这是您的问题:PreferenceActivity会自动将您的设置保存在应用程序的共享首选项中。对于每个设置,您在preferences.xml中定义一个键。在你的情况下,这是
android:key="checkbox"
因此,当您使用按钮5打开首选项时,SP中的值“复选框”将设置为 true 。再次使用按钮1打开首选项时,PreferencesActivity会查找SP,看到“复选框”是 true ,因此将复选框设置为已选中。
为了避免这个问题,就像Adrian所说,你必须将信息传递给你的PreferenceActivity,了解点击的按钮。在PreferenceActivity中,您必须获得对复选框首选项的引用,并将传递的按钮ID添加到密钥中。
Preference checkboxPreference = findPreference("checkbox");
checkboxPreference.setKey(checkboxPreference.getKey() + buttonId);
现在SP中为每个按钮保存了10个唯一命名的布尔值(“checkbox1”,“checkbox2”,..)。
玩得开心