このコードはシークバーを作成し、シークバーにスライダーと同じ数の EditText フィールドを作成させ、多すぎるフィールドを削除します。このコードは OnActivityCreated にあります
final LinearLayout linearLayout = (LinearLayout) getActivity()
.findViewById(R.id.npv_calcfields);
EditText editText = new EditText(getActivity());
editText.setId(i);
editText.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
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) {
selection.setText("You have selected " + progress + " periods.");
if (progress == 0) {
String normalstring = getActivity().getResources()
.getString(R.string.npv1);
selection.setText(normalstring);
}
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.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
linearLayout.addView(editText);
editText.setHint("Cash Flow " + i);
i++;
}
}
}
public void onStopTrackingTouch(SeekBar arg0) {
}
public void onStartTrackingTouch(SeekBar arg0) {
}
});
このコードは、一般クラス領域にあります。
int i = 0;
EditText r = (EditText) getActivity().findViewById(R.id.npv_rate);
Button calc = (Button) getActivity().findViewById(R.id.npv_calc);
EditText[] DynamicField = new EditText[16];
ここで、ユーザーにこれらの edittext フィールドに数値を入力してもらい、フィールドの ID を使用して計算を行いたいと考えていEntry / (Math.pow(1+r, i)
ますi
。したがって、最初のエントリは次のように計算する必要がありますentry/(1+r)^0
。これは私が試したものですが、うまくいきません。起動時にクラッシュするだけです。
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;
CashFlows[i] = (Double.parseDouble(editText.getText()
.toString())) / (Math.pow(1 + r1, i));
for (double d : CashFlows) {
result += d;
}
answer.setText("answer is " + result);
}
});
私は何を間違えましたか?ところで、最後のコード セグメントだけが機能していません。すべて正常に動作することをコメントすると、テストしました:)明らかに何もしません:)
ここで見ることができるエラーログの背景を少し説明します: http://pastebin.com/G8iX6Pkm 編集: クラスファイル全体はここで見ることができます: http://pastebin.com/dxA91dst、プロジェクト全体はここで見つけることができます: https://github.com/killerpixler/Android-Financial-Calculator.git
クラス ファイルは、誰かが Main アクティビティのリスト項目をクリックしたときに DetailsActivity に読み込まれるフラグメントです。私が言ったように、エラーはボタンリスナーにある必要があります。これは、追加する前に機能していたためです。