我的申请中有三项活动。第一个活动在列表视图中显示来自Web服务的学校列表。所有学校都有特殊身份证明。然后,如果单击任何项目,则会打开下一个活动,并在列表视图中显示该特定学校的学生列表。当点击任何学生时,下一个活动打开,并记下学生出勤率,如现在缺席和离开。如果选择存在,则显示绿色,缺少红色,留下橙色
问题
在列表视图中显示所有学生的活动中,如果我点击列表视图的第0行,即学生1,则打开出勤页面,如果出现标记,则我将共享偏好中的值保存在学生列表活动我从学生的自定义适配器获取该存储的值,并将学生行的颜色设置为绿色。这一切都很好,但问题是因为这是列表视图的0索引,它显示绿色。当我点击另一所学校时,我们可以说学校B然后显示该学校的学生名单,但0指数也会突出显示为绿色。虽然我在学校A学生1,但它也在学校B学生1中显示绿色。我知道这是由于自定义适配器,因为我在其中获得共享偏好值,但如何解决它?学生有一个自定义适配器,以便如何更改? 主要流程如下:
学校A - 显示学生列表 - 学生1存在,因此列表视图的第一行变为绿色。 学校B - 显示学生列表 - 学生1已经是绿色(因为它获得了相同的共享pref值,可能是该指数0)虽然它是新学校和学生,但我不想要这个
这是我在第三个活动中执行的操作,当点击保存按钮时,复选框值存储在共享首页中。
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences settings = getSharedPreferences("zero", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("r2azero",one.isChecked());
editor.putBoolean("r2bzero",two.isChecked());
editor.putBoolean("r2czero",three.isChecked());
editor.putString("zero", "zeroid");
editor.apply();
然后在Student适配器中我在getView中执行此操作:
boolean r2achecked,r2bchecked,r2cchecked;
Intent intent = ((Activity) mContext).getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
SharedPreferences settings = mContext.getSharedPreferences("zero", mContext.MODE_PRIVATE);
r2acheckede = settings.getBoolean("r2azero",false);
r2bcheckede = settings.getBoolean("r2bzero",false);
r2ccheckede = settings.getBoolean("r2czero",false);
if (r2achecked == true&& p ==0)
{
v.setBackgroundColor(Color.GREEN);
}
if (r2bchecked == true&& p ==0)
{
v.setBackgroundColor(Color.RED);
}
if (r2cchecked == true&& p ==0)
{
v.setBackgroundColor(Color.BLUE);
}
其中p是被点击项目的位置