EDIT: Вот новый код, который вы предложили:программно создавать поля EditText в фрагменте из SeekBar
package com.mwerner.mycalc.finance;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class F_NPV extends Fragment {
EditText[] DynamicField = new EditText[16];
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.npv, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final LinearLayout linearLayout = (LinearLayout)getActivity().findViewById(R.id.npv_calcfields);
EditText editText = new EditText(getActivity());
final int i = 0;
editText.setId(i); //Set id so that you can remove that EditText in the future.
editText.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
linearLayout.addView(editText);
SeekBar bar = (SeekBar) getActivity().findViewById(R.id.npv_seekbar);
final TextView selection = (TextView) getActivity().findViewById(R.id.npv_selected);
bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekbar, int progress,
boolean fromUser) {
// to display to the user how many he has selcted
selection.setText("You chose " + progress + "periods");
if (i > progress) {
i--;
EditText editText = (EditText) getActivity().findViewById(i);
linearLayout.removeView(editText);
}
else {
EditText editText = new EditText(getActivity());
editText.setId(i);
editText.setHint("EditText No: " + (i+1));
editText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
linearLayout.addView(editText);
i++;
}
}
public void onStopTrackingTouch(SeekBar seekbar) {}
public void onStartTrackingTouch(SeekBar arg0) {}
});
}
}
EDIT 2:
Я установил «отставание» в сокращении числа полей, когда я слайд вниз быстро.
bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekbar, int progress,
boolean fromUser) {
// to display to the user how many he has selcted
selection.setText("You chose " + progress + "periods");
if (i > progress) {
while (i > progress) {
i--;
EditText editText = (EditText) getActivity().findViewById(i);
linearLayout.removeView(editText);
}
}
else {
while (i < progress) {
EditText editText = new EditText(getActivity());
editText.setId(i);
editText.setHint("EditText No: " + (i+1));
editText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
linearLayout.addView(editText);
i++;
}
}
}
public void onStopTrackingTouch(SeekBar seekbar) {}
public void onStartTrackingTouch(SeekBar arg0) {}
});
Теперь мне нужно сделать то же математическую операцию с каждым полем:
answer = entry/(Math.pow(1+r , i)
в основном каждая запись получает делится на (1+r)
к власти Ид, что это поле имеет ... так что первый текстовое редактирование делится на (1+r)^0
, второе поле делится на (1+r)^1
и т. д. Как мне это сделать?
Edit 3:
calc.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Double r1 = Double.parseDouble(r.getText().toString());
EditText editText = (EditText) getActivity().findViewById(i);
TextView answer = (TextView) getActivity().findViewById(R.id.npv_answer);
double[] CashFlows;
CashFlows = new double[i];
double result = 0;
for (int i1 = 0; i1 < i; i1++) {
CashFlows[i] = (Double.parseDouble(editText.getText().toString()))/(Math.pow(1+r1, i));
}
for(double d : CashFlows) {
result += d;
}
answer.setText("answer is " + result);
}
});
В основном это был мой мыслительный процесс. Скажите, пожалуйста, где я ошибся, потому что это приводит к сбою при загрузке fragment
.
Моя идея была
Double r1 используется в математике TextView answer
используется для вывода окончательного ответа
EditText editText
является то, что вы сказали мне, что мне нужно ссылаться на это
Теперь я понял, я 'd поместить все значения, которые пользователь вводит в заданные поля в массив, а также сделать простую математику для всех из них. Это то, для чего первый цикл цикла. Затем, когда этот массив будет выполнен, я решил, что добавлю их все вместе, так как это то, что я хочу. Я нашел код для «Для каждого» цикла здесь
http://www.leepoint.net/notes-java/flow/loops/foreach.html
Тогда, когда все это подытожили он должен быть одним дубля в переменном результате ... то я бы просто установить текст, который номер ...
Где я ошибаюсь?
немного кода для добавления помогло бы, но я могу понять, что один из моих собственных с разработчиком docs :) Спасибо, это решение кажется действительно интуитивно понятным и хорошим :) – Killerpixler
ОК я не могу понять это, пожалуйста, помогите, я обновил его, как видно выше, а также отступы и прочее не работайте либо – Killerpixler
@Killerpixler Извините за мой поздний ответ :) Я обновил свой ответ с помощью некоторого кода для вас. –