編集:これがあなたが提案した新しいコードです:
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) {}
});
}
}
編集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)
、そのフィールドが持つ id の累乗で割られます...最初のテキスト編集は で割られ(1+r)^0
、2 番目のフィールドは で割られ(1+r)^1
ます。
編集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
がロードされたときにクラッシュが発生するため、どこでひどく間違ったのか教えてください。
私の考えは
ダブルr1は数学
TextView answer
で使用され、最終的な答えを出力するために使用されます
EditText editText
あなたが私に言ったのは私がそれを参照する必要があるということです
今、私は、ユーザーが特定のフィールドに入力したすべての値を配列に入れ、それらすべてに対して簡単な計算を行うと考えました。それが最初の for ループの目的です。次に、その配列が完成したら、それが欲しいので、それらをすべて一緒に追加すると考えました。ここで「For each」ループのコードを見つけました
http://www.leepoint.net/notes-java/flow/loops/foreach.html
次に、すべてが合計されると、変数の結果で 1 つの double になるはずです...次に、テキストをその数値に設定するだけです...
どこで私は間違えましたか?