我有21个togglebuttons,并想知道如何使用共享偏好保存每个人的状态?
我试过这个:
button = (ToggleButton)findViewById(R.id.btn1);
SharedPreferences sharedPrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
button.setChecked(sharedPrefs.getBoolean(PREFS_NAME, true));
但是如何让它存储所有按钮的值,我可以在PREFS_NAME中为所有按钮存储吗?
好的,所以我用这些按钮创建了xml文件:
<ToggleButton
android:textOff="1"
android:textOn="*"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New ToggleButton"
android:id="@+id/tB1" />
以及使用此代码的活动:
int [] viewIds = new int [] {R.id.tB1, R.id.tB2, ...
String [] stringIds = new String [] {"R.id.tB1" ...
ToggleButton button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.randd_screen);
for(int i =0; i<viewIds.length;i++)
{
Log.d(TAG, "inside loop");
Log.d(TAG, "Run no.:" + i);
button =(ToggleButton)findViewById(viewIds[i]);
Log.d(TAG, "button = " + button);
Log.d(TAG, "from stringIds[i] " + stringIds[i]);
SharedPreferences sharedPrefs = getSharedPreferences("PREFS_NAME", MODE_PRIVATE);
button.setChecked(sharedPrefs.getBoolean(Integer.toString(viewIds[i]), false));
}
}
现在,如何创建onClick方法,它会更新每个按钮值以及保存和加载它?
更新2
这样我的活动现在看起来如何,但它不会保留选中的按钮。我错过了什么或做错了什么?
int [] viewIds = new int [] {R.id.tB1, R.id.tB2, ...
String [] stringIds = new String [] {"R.id.tB1", ...
ToggleButton button;
}
button = (ToggleButton)findViewById(R.id.tB2);
SharedPreferences sharedPrefs = getSharedPreferences("PREFS_NAME", MODE_PRIVATE);
button.setChecked(sharedPrefs.getBoolean(stringIds[1], true));
}
ToggleButton.OnCheckedChangeListener listener = new ToggleButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton v, boolean isChecked) {
Log.d(TAG, "in onCheckChanged()");
int [] viewIds = new int[2];
int index;
for(index = 0; index < viewIds.length; index++) {
if (v.getId() == viewIds[index]) {
getSharedPreferences("PREFS_NAME", MODE_PRIVATE)
.edit()
.putBoolean(stringIds[index], isChecked)
.apply();
break;
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.randd_screen);
for(int i =0; i<viewIds.length;i++)
{
Log.d(TAG, "inside loop");
Log.d(TAG, "Run no.:" + i);
button =(ToggleButton)findViewById(viewIds[i]);
Log.d(TAG, "button = " + button);
Log.d(TAG, "from stringIds[i] " + stringIds[i]);
SharedPreferences sharedPrefs = getSharedPreferences("PREFS_NAME", MODE_PRIVATE);
button.setChecked(sharedPrefs.getBoolean(stringIds[i], false));
button.setOnCheckedChangeListener(listener);
}
}
答案 0 :(得分:1)
您需要为所有人存储状态。
<table>
您可以通过实施ID列表及其首选项来使其更加清晰。然后,您可以循环浏览它们,根据需要设置按钮。
不将生成的整数资源用作SharedPreferences sharedPrefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
button = (ToggleButton)findViewById(R.id.btn1);
button.setChecked(sharedPrefs.getBoolean(PREFS_BUTTON1, true));
button = (ToggleButton)findViewById(R.id.btn2);
button.setChecked(sharedPrefs.getBoolean(PREFS_BUTTON2, true));
button = (ToggleButton)findViewById(R.id.btn3);
button.setChecked(sharedPrefs.getBoolean(PREFS_BUTTON3, true));
//...
标识符SharedPreferences
。您为此目的创建一个String数组。请改用Integer.toString(viewIds[i])
。
您可以创建一个侦听器并将相同的侦听器应用于每个ToggleButton。在该监听器中,您可以检查哪个按钮接收了呼叫并设置了适当的首选项。
stringIds[i]