gpt4 book ai didi

java - 如何在 ListView 中保存多个动态生成的复选框的状态? (安卓Java)

转载 作者:行者123 更新时间:2023-12-01 09:06:48 25 4
gpt4 key购买 nike

我有一个看起来像这样的 Activity - ListView 的长度是动态的并且可以改变; enter image description here

现在,我已经根据数组的长度声明并初始化了复选框。当用户单击“保存”时,我需要保存这些框的状态。我该如何实现这一目标?我编写了以下代码,但没有得到任何输入,即即使复选框已初始化,我也不认为 Activity 知道哪个复选框声明对应于 Activity 上的哪个复选框。请帮忙 - 谢谢!

cbs = new CheckBox[length];
for (int i=0;i<length;i++){
cbs[i] = new CheckBox(ThisActivity.this);
}
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DoOnBtnClick(v);
}
});
}
public void DoOnBtnClick (View v) {
for(int i = 0; i < cbs.length; i++){
if(cbs[i].isChecked()){
selectedCheckboxes.add(toInt(cbs[i].getTag()));
Log.e("GET TAG",Integer.toString(toInt(cbs[i].getTag())));
}
}
}

最佳答案

您可以使用sharedPreferences来存储和检索复选框状态数据

首先初始化变量:

public static final String MyPREFERENCES = "MyPrefs";
SharedPreferences sharedPreferences;

sharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

现在,在初始化所有复选框后,在 onCreate() 中使用 setOnCheckedChangeListener

现在您可以使用以下方法从共享首选项加载数据:

public void Load_checklist() {
SharedPreferences shared = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
for(int i = 0; i < cbs.length; i++){
if (shared.getString(Integer.toString(i), "").equals("1")) {
cbs[i].setChecked(true);
}else{
cbs[i].setChecked(false);
}
}
}

最后你的 onCreate 方法应该如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_name);
int array_length=jArray.length(); //checkbox size
//layout where you want to dynamically add checkboxes
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.lyout);
Load_checklist();
for(int c=0; c<jArray.length();c++){
CheckBox chk=new CheckBox(this);
chk.setId(c++);
chk.setText("Click to add values");
chk.setTextColor(Color.GRAY);
chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
String s="x"+buttonView.getId();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

switch(buttonView.getId()){

case 1: // do something on 1st checkbox
if (isChecked) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(Integer.toString(c), "1");
editor.commit();
} else {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(Integer.toString(c), "0");
editor.commit();
}
break;

case 2: //do something on 2nd checkbox
break;

//And SO ON for all checkboes
}
}
});
linearLayout.addView(chk);
}
}

注意:如果 SetId(Int) 不起作用,那么您可以使用 setTag(int) 代替。

关于java - 如何在 ListView 中保存多个动态生成的复选框的状态? (安卓Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com