【发布时间】:2020-07-18 21:33:36
【问题描述】:
如何将复选框数据从一个活动传递到另一个活动?如果复选框被选中/选中,它将以字符串的形式将数据从第一个活动传递到第二个活动。第二个活动将获取字符串并在_Job_fx上设置文本,但是为什么在未选中复选框时会出现其他复选框字符串?我的数据绕过了我的条件并在 _Job_fx 上设置了文本。如何解决这个问题?
第一个活动:
sharedPreferences = getSharedPreferences("Add_job_fx", MODE_PRIVATE);
_electric_item01 = (CheckBox) findViewById(R.id.electric_item01);
checkbox(_electric_item01);
_electric_item02 = (CheckBox) findViewById(R.id.electric_item02);
checkbox(_electric_item02);
_electric_item03 = (CheckBox) findViewById(R.id.electric_item03);
checkbox(_electric_item03);
_electric_item04 = (CheckBox) findViewById(R.id.electric_item04);
checkbox(_electric_item04);
private void checkbox(final CheckBox check) {
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (check.isSelected()) {
//edit shared preference (put data)
SharedPreferences.Editor editor = sharedPreferences.edit();
//put data in shared preference
editor.putString(check.getText().toString(), check.getText().toString());
//apply changes to shared preference
editor.apply();
}
else {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(check.getText().toString());
editor.clear();
editor.apply();
}
}
});
}
第二个活动:
//shared preferences (Name, Mode)
sharedPreferences = getSharedPreferences("Add_job_fx", MODE_PRIVATE);
//get data from shared preference
s_electric_item01 = sharedPreferences.getString("Change lightbulb", "");
s_electric_item02 = sharedPreferences.getString("Change starter", "");
s_electric_item03 = sharedPreferences.getString("Change light set", "");
s_electric_item04 = sharedPreferences.getString("Change fan + regulator", "");
//pass data to container for view
_Job_fx.setText("Job: " + s_electric_item01 +"\n"+ s_electric_item02 + "\n"+ s_electric_item03);
【问题讨论】:
-
您确定需要将
remove()和clear()组合在一起吗? -
此外,我现在正在查看文档,如果在使用
putString()或任何其他“放置”时调用apply()是可以的,那么在使用remove()和clear()时只说将它与commit()结合起来。 remove() docsclear() docs -
哦,我生气了,设置了 2 个限制来从 sharedpreference 中删除数据。它不起作用...我不知道是什么导致我的第一个活动绕过我的 if 语句并将数据传递给第二个活动,即使我的复选框没有被选中。
-
我是这么认为的,但是您是否尝试过使用
commit()而不是apply()?仅用于删除数据。 -
您在谈论传递数据,但它只是复选框的真或假。我想知道为什么您将状态保存在共享首选项中,您可以在启动第二个活动的意图中使用 putExtra()。此外,如果您想保留共享偏好并且删除不起作用,您可以将“true”更改为“false”。
标签: android checkbox android-checkbox