【问题标题】:save preferences for dynamically created multiple checkboxes android保存动态创建的多个复选框的首选项android
【发布时间】:2014-05-03 19:38:51
【问题描述】:

作为我的应用程序的一部分,我正在尝试创建一个可自定义的清单。用户可以从默认清单中选择尽可能多的内容,并在列表中添加和删除新项目。但是,一旦用户最终确定了列表中的项目,则需要保存该列表以供下次使用该应用程序时使用。

我尝试了几种方法,但都没有奏效。有人可以帮我吗? 代码如下:

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);
}    

【问题讨论】:

  • 现在 Vyger 怎么样?你现在能帮帮我吗?
  • 我不擅长以编程方式生成的控件。我也不明白需要通过代码来做这些事情......

标签: android dynamic checkbox


【解决方案1】:

您应该在 xml 中列出您的列表以保持一致性......

私人无效保存(){ SharedPreferences sharedPreferences = PreferenceManager

    .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);

    }

【讨论】:

  • 如果你想让你的列表改变并且是动态的,你需要一个 arraylist 适配器,你需要实现它。
  • 好吧,我可以在不需要数组适配器的情况下从列表中生成、添加和删除。这是列表中的最后一个函数。我没有太多时间再次使用数组适配器重新做所有事情。你能给出一个不使用 XML 或 Array Adapter 的解决方案吗?
  • 只要您在创建项目之前不使用上述调用,它们就应该可以工作。所以在你制作它们之后,我假设在 oncreate 中,为它们分配每个 id,然后 loadPreferences,然后在 onPause 中保存首选项。
  • 没有。他们不是。错误的结果出来了。我猜这很复杂,因为当前活动中的列表是基于上一个活动发送的信息而来的。因此,我现在认为,偏好必须保存在以前的活动中,而不是这里。我生成列表的方式有点硬编码,所以我发现很难从它们中生成保存的首选项。你有兴趣看一下代码吗?
  • 是的,你的错误的 logcat 输出也会有所帮助
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多