如何处理共享偏好中的多个按钮

时间:2016-04-19 14:51:49

标签: android

我有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);



    }



}

1 个答案:

答案 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]