簡體   English   中英

如何保存沒有額外變量的復選框狀態?

[英]How to save the state of a checkbox without extra variables?

我在6個活動中有100多個不同的復選框,我想保存每個活動的狀態,以便當我從一項活動切換到另一項活動時,它保持選中狀態。 我真的必須創建100個以上的布爾值來分別保存每個復選框,還是有一種更簡單的方法來保存和讀出狀態? 我想到了使用循環,但我真的想不出一種聰明的方法來做到這一點。 如果有人可以幫助,那就太好了! 這是我的復選框之一的示例:它應該在框被選中時向ArrayList對象添加一個String,而在未選中該框時刪除String。 它工作正常,但是當我離開時。 Actvity1,進入Activity2並返回Acivity1以取消選中我的復選框之一,該字符串第二次添加到我的ArrayList中,而不是被刪除。

    myBox1.setOnClickListener(new OnClickListener() {
        @Override

        public void onClick(View v) {
            if (myBox1.isChecked() == true)
                helperActivity.myStringArrayList.add("myString1");

            else {
        helperActivity.myStringArrayList.remove("myString1");}
        }           
    });

如果復選框的數量相同,則保留一個布爾數組

您可以使用全局HashMap將復選框的ID映射到其狀態。 然后,您將Checkbox子類化,根據需要進行覆蓋,以將狀態保存/恢復到Map中,並改為在xml文件中使用您的類。 然后,您可以在應用啟動時保存並還原地圖,使用它來寫入文件:

        file = context.openFileOutput("checkbox_state.prefs", Context.MODE_PRIVATE);
        objectOutputStream = new ObjectOutputStream(file);
        objectOutputStream.writeObject(myCheckboxesState);

這是從其中讀到的:

        file = context.openFileInput("checkbox_state.prefs");
        objectInputStream = new ObjectInputStream(file);
        myCheckboxesState = (Map<Integer, Boolean>) objectInputStream.readObject();

從我的頭頂上,我認為這是最好的方法。

一種選擇是使用“ 共享首選項”保存每個復選框的選中狀態。

// Access the default SharedPreferences
SharedPreferences preferences = 
  PreferenceManager.getDefaultSharedPreferences(this);

...

SharedPreferences.Editor editor = preferences.edit();
// Save the checked state
editor.putBoolean("myBox1", true);
editor.commit();

...

// Get and set the checked state
boolean myBox1State = preferences.getBoolean("myBox1", false);
myBox1.setChecked(myBox1State);

這種方案的優點是這些設置將在應用程序重啟后繼續存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM