保存复选框的状态

Posted

技术标签:

【中文标题】保存复选框的状态【英文标题】:Saving the state of checkboxes 【发布时间】:2014-05-20 20:13:58 【问题描述】:

我的申请有问题。我有一个带有复选框的应用程序。我怎样才能保存它们?

我的布局是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:layout_
    android:layout_ >


<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="10dp"
    android:textSize="20dp"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Switzerland" />
<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="35dp"
    android:textSize="14dp"
    android:textColor="#545454"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Bern" />


<CheckBox
    android:id="@+id/itemCheckBox"
    android:layout_
    android:layout_
    android:layout_marginTop="20dp"
    android:layout_alignParentRight="true"
    android:gravity="right" />


<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="80dp"
    android:textSize="20dp"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Germany" />
<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="105dp"
    android:textSize="14dp"
    android:textColor="#545454"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Berlin" />



<CheckBox
    android:id="@+id/itemCheckBox"
    android:layout_
    android:layout_
    android:layout_marginTop="90dp"
    android:layout_alignParentRight="true"
    android:gravity="right" />

<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="150dp"
    android:textSize="20dp"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Great Britain" />
<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="175dp"
    android:textSize="14dp"
    android:textColor="#545454"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="London" />



<CheckBox
    android:id="@+id/itemCheckBox"
    android:layout_
    android:layout_
    android:layout_marginTop="160dp"
    android:layout_alignParentRight="true"
    android:gravity="right" />

<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="220dp"
    android:textSize="20dp"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="France" />
<TextView
    android:id="@+id/lstvw_textView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="245dp"
    android:textSize="14dp"
    android:textColor="#545454"
    android:layout_toLeftOf="@+id/itemCheckBox"
    android:padding="8dp"
    android:text="Paris" />



<CheckBox
    android:id="@+id/itemCheckBox"
    android:layout_
    android:layout_
    android:layout_marginTop="230dp"
    android:layout_alignParentRight="true"
    android:gravity="right" />

</RelativeLayout>

而我的 main.class 是:

package com.example.capitalcities;

import com.example.capitalcities.R;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.view.MenuItem;
import android.widget.ImageButton;
import android.view.View.OnClickListener;

public class MainActivity2 extends Activity 


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);

    
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
        Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
        startActivityForResult(myIntent, 0);
        return true;

    


你现在怎么做?

希望你能理解我,希望你能帮助我。

【问题讨论】:

您需要将它们保存在内存中还是保存到磁盘(并从中重新加载) 将它们存储到共享首选项中,并在设置打开或需要时阅读 我需要保存它们,关闭应用程序,然后我想打开相同的设置。你能帮我解决共享的偏好吗? (可以重写代码吗?) 【参考方案1】:

使用 SharedPreferences 将您的复选框存储为布尔值。

类似:

SharedPreferences sharedPreferences = PreferencesManager.getDefaultSharedPreferences(this);
checkBoxDummy.setChecked(sharedPreferences.getBoolean("checkBoxDummy", false));

要存储值,请使用侦听器。类似的东西:

checkBoxDummy.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 
        sharedPreferences.putBoolean("checkBoxDummy", isChecked);
    
);

【讨论】:

实际上,您拥有自己完成此任务所需的一切。基本上只是复制/过去

以上是关于保存复选框的状态的主要内容,如果未能解决你的问题,请参考以下文章

重新加载时保存复选框状态

Android:需要在自定义适配器列表视图中保存复选框状态

用户单击下一个分页页面或页面刷新后如何保存复选框状态并将值发布到页面?

如何从复选框数组中保存布尔状态并在使用 SharedPreferences 加载适配器时加载它们的状态

保存 UITableviewcell accessoryView 的状态

从 0 和 1 的数组中恢复复选框的状态