Как сохранить arraylist в виде строки внутри? - PullRequest
0 голосов
/ 12 января 2019

Я создал EditText s динамически на основе нажатия кнопки и использует List для получения ввода от EditText s. Я попытался сохранить его как строки внутри, и он сохраняет только часть значений. Это мой код.

Это добавление новых EditText s:

List<EditText> allElem = new ArrayList<EditText>();//utk save

public void addLine() {
    LinearLayout ll = (LinearLayout) findViewById(R.id.layout_dynamic);

    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    //add text view desc
    TextView tv=new TextView(this);
    tv.setLayoutParams(p);
    tv.setText("Description");
    ll.addView(tv);
    // add edittext
    EditText et = new EditText(this);
    et.setLayoutParams(p);
    ll.addView(et);
    et.setHint("Enter expenses description");
    allElem.add(et);//add dlm list allElem

    //add text view spend
    TextView tv1=new TextView(this);
    tv1.setLayoutParams(p);
    tv1.setText("Spending (RM)");
    ll.addView(tv1);
    // add edittext
    EditText et1 = new EditText(this);
    et1.setLayoutParams(p);
    ll.addView(et1);
    et1.setHint("Enter your spending in RM");
    et1.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
    allEd.add(et1);//add dlm list allEd
    allElem.add(et1);//add dlm list allElem

    //add text view spend
    TextView tv2=new TextView(this);
    tv2.setLayoutParams(p);
    tv2.setText("Extra Note");
    ll.addView(tv2);
    // add edittext
    EditText et2 = new EditText(this);
    et2.setLayoutParams(p);
    ll.addView(et2);
    et2.setHint("Enter your note (optional)");
    allElem.add(et2);//add dlm list allElem

}

Я не могу получить все значения из списка. Только 3 последних значения из списка сохраняются.

  String data, dataText;
  public String file = "expensesrecord";

  public void save(){
    for (int i=0;i<allElem.size();i++){
        EditText descr = allElem.get(i);
        dataText="Description: " + descr.getText().toString() + "\n";
        i++;
        EditText spendi = allElem.get(i);
        dataText +="Spending: RM " + spendi.getText().toString() + "\n";
        i++;
        EditText note = allElem.get(i);
        dataText +="Extra Note: " + note.getText().toString() + "\n\n";
    }

    data="Date: " + tvDate.getText().toString() + "\n" + "Total Expenses: " + tvDisplayResult.getText().toString() + "\n";
    data+=dataText;

    try {
        FileOutputStream fOut = openFileOutput(file, Context.MODE_APPEND);
        fOut.write(data.getBytes());
        fOut.close();
        Toast.makeText(getBaseContext(),"Record saved",Toast.LENGTH_SHORT).show();
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Ожидаемый результат должен быть:

Дата: 01.12.2009 Всего расходов: 30

Описание: обед Расходы: 15 Примечание: 2 человека

Описание изделия: ужин Расходы: 30 Примечание: 3 человека

Однако фактический результат показывает только:

Дата: 01.12.2009 Всего расходов: 30

Описание изделия: ужин Расходы: 30 Примечание: 3 человека

...