为Android中的每个循环修改List的每个对象

时间:2016-05-29 23:46:06

标签: java android

我从数据库中提取项目。我有一些编辑文本,我需要从这些可编辑的文本中获取文本并传递该文本,更新我从数据库中获取的列表的对象。我从“编辑文本”中获取值。这是它在代码中的外观:

String getNasteMonday = etNasteMonday != null ? etNasteMonday.getText().toString() : null;
String getInsulinMondayBeforeBreak = etInsulinMondayBeforeBreak != null ? etInsulinMondayBeforeBreak.getText().toString() : null;    
List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());
double nasteValue = convertStringToDouble(getNasteMonday);
double insulinBeforeBreakValue = convertStringToDouble(getInsulinMondayBeforeBreak);

for (Day day : days) {
    day.setNaste(nasteValue);
    day.setInsulinBeforeBreak(insulinBeforeBreakValue);
    mDatabase.updateDay(day);
}

在这种情况下,我在数据库中有三个表,一个用于存储天数,一个用于存储周,一个用于存储数周。我在这种情况下按周名称提取数据,每周对象有7天,我需要在该周内为每一天存储不同的值。现在,我得到的是,在这个foreach循环中,我在所有7天内存储相同的值并且我不想要这样。我想做这样的事情,例如:

for (Day day1 : days) {
    day1.setNaste(nasteValue);
}
for (Day day2 : days) {
    day2.setNaste(nasteValue2);
}

修改

当我从数据库中提取数据时,如何在EditText中显示文本:

我应该从字符串数组中设置文本。

    List<String> values = new ArrayList<>();
    int[] ids = new int[]{R.id.et_naste_monday, R.id.et_insulin_monday_before_breakf, R.id.et_posle_dorucka_monday, R.id.et_pre_rucka_moday,
    R.id.et_insulin_monday_pre_rucka, R.id.et_posle_rucka_monday, R.id.et_pre_vecere_moday, R.id.et_insulin_monday_pre_vecere, R.id.et_posle_vecere_monday,
    R.id.et_pred_spavanje_moday, R.id.et_insulin_monday_pred_spavanje};
    List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());

    int count = 0;

    for (int id : ids) {
        EditText t = (EditText) findViewById(id);
        values.add(t.getText().toString());
        t.addTextChangedListener(this);
        applyChangedEditTextColor(false, values, t);
        // Here i should implement some logic like and apply for all edittexts
        // for (Day day : days) {
        // 
        // }
    }

2 个答案:

答案 0 :(得分:1)

因为你有很多EditText要使用。我会创建一些Arrays来存储实例,并在循环中恢复它们。

EditText[] nasteEdit = new EditText[]{ /* your seven instance of editText for naste value in correct order */};
List<Day> days = mDatabase.getAllDaysByWeek(week.getTitle());

int cntDays = 0;
for (Day day : days) {
    String getNasteMonday = nasteEdit[cntDays] != null ? nasteEdit[cntDays].getText().toString() : null;
    double nasteValue = convertStringToDouble(getNasteMonday);
    day.setNaste(nasteValue);

    // SAME FOR OTHER ATTRIBUTE
    mDatabase.updateDay(day);

   cntDays++;
}

在循环期间,我得到正确的EditText并创建值。我在这里保留你的迭代循环并使用外部计数器,但这应该有效。

您只需为Day所拥有的每个属性执行此操作即可。

数组需要拥有EditText的实例,所以不要浪费时间来获取每个文本;)

希望这会有效,我现在无法测试它。

答案 1 :(得分:0)

我找到了解决方案。更好的方法是使用常规for循环并使用List中的方法get()来获取元素在列表中的位置。

for (int i = 0; i < days.size(); i++) {
    Day day1 = days.get(0);
    day1.setNaste(3.0);
    Day day2 = days.get(1);
    day2.setNaste(2.0);
    Day day3 = days.get(2);
    Day day4 = days.get(3);
    Day day5 = days.get(4);
    Day day6 = days.get(5);
    Day day7 = days.get(6);
}

如果您需要更新数据库中的某些数据,那么您将在for循环之外声明对象Day,并在数据库的update方法中调用该对象:

database.updateDay(day1);
database.updateDay(day2);