0

編集:これがあなたが提案した新しいコードです:

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 になるはずです...次に、テキストをその数値に設定するだけです...

どこで私は間違えましたか?

4

2 に答える 2

3

xml ファイルに 2 つのレイアウトを作成できます。たとえば、2 つの線形レイアウトなど、必要なものは何でも作成できます。

最初のレイアウトでは、シークバーのみを追加します。

Java コードから id で 2 番目のレイアウトを取得し、進行状況が変化するたびに TextView をプログラムで 2 番目のレイアウトに追加/削除します。

これは次のように行うことができます。

最初にこのような2番目のレイアウトを取得します

LinearLayout linearLayout = (LinearLayout)getActivity().findViewById(R.id.npv_calcfields);

次に、EditText を追加します。

EditText editText = new EditText(this);
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);

編集:これは実際の例です:

public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    if ( i > progress) {
        i--;
        EditText editText = (EditText) findViewById(i);
        linearLayout.removeView(editText);
    }
    else {
        EditText editText = new EditText(SeekBarActivity.this);
        editText.setId(i);
        editText.setHint("EditText No: " + (i+1));
        editText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        linearLayout.addView(editText);
        i++;
    }
}

お役に立てば幸いです。;)

于 2012-07-04T11:51:00.017 に答える
0

xmlで作成するだけLinearLayoutです..このように

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/family_detail_linear"
        android:orientation="vertical"
        ></LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/family_detail_addbutton"
        android:text="Add More"
        />

</LinearLayout>
    </ScrollView>

</LinearLayout>

そしてあなたの中でそれを見つけてLinearLayoutくださいfragment

public class MyFrag extends Fragment{


    private Button addmoremember;
    private Activity activity;
    private LinearLayout layout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.family_details, container, false);

        activity=getActivity();
        addmoremember=(Button)rootView.findViewById(R.id.family_detail_addbutton);
        layout=(LinearLayout)rootView.findViewById(R.id.family_detail_linear);
       addmoremember.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText edttexname= new EditText(activity);
                edttexname.setHint("Enter Name");

                layout.addView(edttexname);

            }
        });

        return rootView;
    }
}
于 2015-12-04T07:31:44.960 に答える