2017-08-16 152 views
0

我重新發布這個問題,因爲我仍然堅持這一點。共享偏好項目存儲

所以我正在創建一個簡單的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); 
     } 
    } 

如何使用共享首選項來實現所有開關箱選項?

謝謝。

+0

您需要使用與複選框不同的鍵來將其保存爲其他項目。您希望如何保存數據,以及您想如何檢索和使用它。 –

+0

@Kapil G我希望無論用戶選擇了哪個複選框,即使我在應用程序被終止後重新打開,選擇仍然存在。我發佈的上面的代碼可以用於第一個複選框。但是,即使用戶選擇了多個複選框,我也希望數據仍然存在。 – Thomas

+0

然後將每個複選框的值保存到不同的密鑰中,然後在打開活動時獲取所有密鑰,並根據每個密鑰中存儲的值設置複選框 –

回答

1

更新您的兩種方法 - onCreateOptionsMenuonOptionsItemSelected,如下所示。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main_menu, menu); 
     SharedPreferences settings = getSharedPreferences("settings", 0); 
     boolean red = settings.getBoolean("red", false); 
     boolean blue = settings.getBoolean("blue", false); 
     boolean green = settings.getBoolean("green", false); 

     MenuItem item = menu.findItem(R.id.color1); 
     MenuItem item1 = menu.findItem(R.id.color2); 
     MenuItem item2 = menu.findItem(R.id.color3); 
     item.setChecked(red); 
     item1.setChecked(blue); 
     item2.setChecked(green); 
     //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.color1: 
       item.setChecked(!item.isChecked()); 


       editor.putBoolean("1", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.color2: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("2", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.color3: 
       item.setChecked(!item.isChecked()); 

       editor.putBoolean("3", item.isChecked()); 
       editor.commit(); 
       return true; 
      case R.id.item_accessibility_services: 
       startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

@Thomas任何理由取消選擇這個答案? –

+0

對不起,只是我錯誤地選擇了這個答案。 – Thomas