Android 为动态创建的多个复选框保存首选项

Android 为动态创建的多个复选框保存首选项,android,dynamic,checkbox,Android,Dynamic,Checkbox,作为我应用程序的一部分,我正在尝试创建一个可定制的清单。用户可以从默认清单中选择任意数量的项目,并在列表中添加和删除新项目。但是,一旦用户最终确定列表中的项目,则需要保存列表,以便下次使用应用程序时使用 我试过几种方法,但都不管用。谁能帮我一下吗? 代码如下: public class Dynamo extends Activity{ @Overrided protected void onCreate(Bundle savedInstanceState) { // TODO Auto-

作为我应用程序的一部分,我正在尝试创建一个可定制的清单。用户可以从默认清单中选择任意数量的项目,并在列表中添加和删除新项目。但是,一旦用户最终确定列表中的项目,则需要保存列表,以便下次使用应用程序时使用

我试过几种方法,但都不管用。谁能帮我一下吗? 代码如下:

public class Dynamo extends Activity{
@Overrided
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    String[] A = new String[100];
    String[] B = new String[100];
    final CheckBox[] cbx = new CheckBox[100];
    int i,k,j,m,q;
    final int n;

    ScrollView sv = new ScrollView(this);
    final LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    sv.addView(ll);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        A = extras.getStringArray("var");
        i = extras.getInt("var2");
        B = extras.getStringArray("var3");
        k = extras.getInt("var4");

        for(j=0;j<i;j++)
        {
            cbx[j]  = new CheckBox(this);
            ll.addView(cbx[j]); 
            cbx[j].setText(A[j]);
        }
        for (m=0;m<k;m++)
        {
            cbx[m]  = new CheckBox(this);
            ll.addView(cbx[m]);
            cbx[m].setText(B[m]);
        }
        n=j+m;

        Button delete=new Button(this);
        delete.setText("Delete");
        ll.addView(delete);

        delete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            for(int p = 0; p < n; p++) {
                if (cbx[p].isChecked())
                {
                    ll.removeView(cbx[p]); 
                    Toast.makeText(getApplicationContext(), "Removing! " , Toast.LENGTH_SHORT).show();
                }
            }  
        }});
        this.setContentView(sv);
}    
public class Dynamo扩展活动{
@压倒
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
字符串[]A=新字符串[100];
字符串[]B=新字符串[100];
最终复选框[]cbx=新复选框[100];
int i,k,j,m,q;
最终整数n;
ScrollView sv=新的ScrollView(此);
最终线性布局ll=新线性布局(本);
ll.设置方向(线性布局、垂直);
sv.addView(ll);
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
A=额外的getStringArray(“var”);
i=额外的getInt(“var2”);
B=额外的getStringArray(“var3”);
k=额外的getInt(“var4”);

对于(j=0;j您应该用xml列出您的列表,以确保一致性

私有void save(){ SharedPreferences SharedPreferences=首选项管理器

    .getDefaultSharedPreferences(this);

    Editor editor = sharedPreferences.edit();

    editor.commit();

//you will need the following line for each checkbox you want to save data for.
        editor.putBoolean("CHECKBOX", yourcheckbox.isChecked();
        editor.commit();



    Toast.makeText(getBaseContext(), "Data Saved...", Toast.LENGTH_SHORT).show();

}
您还需要此方法来加载它们,在onCreate()中调用它,但在初始化复选框之后

private void loadSavedPrefs() {
        SharedPreferences sharedPreferences = PreferenceManager

        .getDefaultSharedPreferences(this);

        yourcheckbox.isChecked=sharedPreferences.getBoolean("CHECKBOX", false);

    }

现在Vyger怎么样?你现在能帮我吗?我对编程生成的控件不太在行。我也不理解用代码来做这些事情的必要性…如果你想让你的列表改变并且是动态的,你需要一个arraylist适配器,你需要实现它。好吧,我能够在没有需要一个数组适配器。这是列表上剩下的最后一个函数。我没有太多时间再次使用数组适配器来重新执行所有操作。您能给出一个不使用XML或数组适配器的解决方案吗?只要您在创建项之前不使用它们,上述调用就应该有效。因此,在创建它们之后,我假设在oncreate中,assi为每个ID签名,然后加载首选项,然后将首选项保存在onPause.No中。它们不是。会出现错误的结果。我想复杂的原因是,当前活动中的列表是基于上一个活动发送的信息来的。因此,我现在认为,首选项必须保存在上一个活动中我生成列表的方式是硬编码的,所以我发现很难从它们那里获得保存的首选项。你有兴趣看一下代码吗?是的,请看一下,你错误的logcat输出也会有帮助