Java 在Android中为每个循环修改列表中的每个对象

Java 在Android中为每个循环修改列表中的每个对象,java,android,Java,Android,我正在从数据库中提取项目。我有一些编辑文本,我需要从这些可编辑文本中获取文本,并传递该文本,同时更新从数据库中获取的列表中的对象。我从编辑文本中获取值。这是它在代码中的外观: String getNasteMonday = etNasteMonday != null ? etNasteMonday.getText().toString() : null; String getInsulinMondayBeforeBreak = etInsulinMondayBeforeBreak != null

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

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);
}
编辑:

从数据库获取数据后,如何在EditText中显示文本:

database.updateDay(day1);
database.updateDay(day2);
我应该设置字符串数组中的文本

    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) {
        // 
        // }
    }
List values=new ArrayList();
int[]ids=new int[]{R.id.et_naste_monday,R.id.et_insulin_monday_breakf,R.id.et_posle_dorucka_monday,R.id.et_pre_rucka_moday,
胰岛素星期一,胰岛素星期一,胰岛素星期一,胰岛素星期一,胰岛素星期一,胰岛素星期一,胰岛素星期一,
R.id.et_pred_spavanje_moday,R.id.et_insulin_monday_pred_spavanje};
List days=mDatabase.getAllDaysByWeek(week.getTitle());
整数计数=0;
for(int-id:ids){
EditText t=(EditText)findViewById(id);
add(t.getText().toString());
t、 addTextChangedListener(此);
applychangeditextcolor(false,value,t);
//在这里,我应该实现一些逻辑,比如,并应用于所有EditText
//用于(天:天){
// 
// }
}

我找到了一个解决方案。更好的方法是使用正则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);
}

因为你有很多编辑文本要使用。我将创建一些数组来存储实例,并将它们恢复到循环中

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[]nasteEdit=newedittext[]{/*您的七个EditText实例的naste值顺序正确*/};
List days=mDatabase.getAllDaysByWeek(week.getTitle());
int cnt天=0;
用于(天:天){
字符串getNasteMonday=nasteEdit[cntDays]!=null?nasteEdit[cntDays].getText().toString():null;
双nasteValue=convertStringToDouble(getNasteMonday);
日期:setNaste(nasteValue);
//其他属性也一样
mDatabase.updateDay(天);
cnt++;
}
在循环过程中,我获得正确的EditText并创建值。我让你们在这里进行迭代循环,并使用一个外部计数器,但这应该是可行的

您只需要对每个属性
执行此操作,这将起作用

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


希望这能起作用,我现在无法测试它。

解释一下
nasteValues
的位置,你会得到7个不同的值,你想在特定的一天设置每个值。但是,由于我们不知道您要设置的值,这是不可能的。编辑了我的问题。所以您每天有一个Edittext?我每天有很多Edittext,但我在这里每天只显示一个Edittext,所以我不会混淆任何人。实际上,我每天都会显示两个EditText
etNasteMonday
etInsulinMondayBeforeBreak
是的,但是对于上课日中的特定属性,您每天有一个EditText。因此有一个“解决方案”。给我10分钟。这种重复,显然不是最好的解决方案!是的,谢谢,但是,您可以在循环前2天更新单个for循环,然后使用增强的for循环更新数据库中的所有内容。没有理由从中提取所有7个对象list@AxelH还有其他建议吗?我知道这不是最好的解决方案,但它对我有效。我需要知道Naste值是从哪里来的。看一看对这个问题的评论。你很好。对于包含大量字段的大屏幕,您需要使用数组或任何类型的集合来使用通用形式的代码。否则你会得到1000行重复的代码。这就是我现在想问你的。我如何用几行代码初始化所有这些EditText。我想这不清楚,你主要谈论循环,所以这很混乱。我不确定你想要什么,如果这离这个问题很远,请不要犹豫,创建一个新的。你能帮我回答我的新问题吗?
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++;
}