我重新發布這個問題,因爲我仍然堅持這一點。共享偏好項目存儲
所以我正在創建一個簡單的android應用程序。我有一個菜單項,其中有3個複選框。只要我的應用程序啓動,用戶可以從給定的複選框中選擇一個或多個。但是,我想保存用戶選擇以供進一步參考。我使用共享首選項爲其中的一個複選框實現了這一目標,但如果選中多個複選框,則無法實現此目的。這是我的代碼:
public class MainActivity extends AppCompatActivity {
static Switch swch;
public static boolean red = false;
public static boolean blue = false;
public static boolean green = false;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
SharedPreferences settings = getSharedPreferences("settings", 0);
boolean isChecked = settings.getBoolean("checkbox", false);
MenuItem item = menu.findItem(R.id.red);
// MenuItem item1 = menu.findItem(R.id.blue);
// MenuItem item2 = menu.findItem(R.id.green);
item.setChecked(isChecked);
// item1.setChecked(isChecked);
// item2.setChecked(isChecked);
//return super.onCreateOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
SharedPreferences settings = getSharedPreferences("settings", 0);
SharedPreferences.Editor editor = settings.edit();
switch (item.getItemId()) {
case R.id.red:
item.setChecked(!item.isChecked());
editor.putBoolean("checkbox", item.isChecked());
editor.commit();
return true;
case R.id.blue:
item.setChecked(!item.isChecked());
editor.putBoolean("checkbox", item.isChecked());
editor.commit();
return true;
case R.id.green:
item.setChecked(!item.isChecked());
editor.putBoolean("checkbox", item.isChecked());
editor.commit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如何使用共享首選項來實現所有開關箱選項?
謝謝。
您需要使用與複選框不同的鍵來將其保存爲其他項目。您希望如何保存數據,以及您想如何檢索和使用它。 –
@Kapil G我希望無論用戶選擇了哪個複選框,即使我在應用程序被終止後重新打開,選擇仍然存在。我發佈的上面的代碼可以用於第一個複選框。但是,即使用戶選擇了多個複選框,我也希望數據仍然存在。 – Thomas
然後將每個複選框的值保存到不同的密鑰中,然後在打開活動時獲取所有密鑰,並根據每個密鑰中存儲的值設置複選框 –