0

初めて計算ボタンをクリックすると正常に動作しますが、結果ダイアログが閉じられた後の2回目のクリックでアプリがクラッシュします。logcatエラーを示します指定された子にはすでに親があります。removeView on the child's parent first.あなたは私が今何をすべきかを呼び出す必要がありますか?そして、removeViewを追加するにはどうすればよいですか?

public class MainActivity extends Activity {
    float Remaining,Departure,TotUplift,SG,DiscResult;
    int CalUpliftResult;

    TextView RemainingTV,DepartureTV,UpliftTV,SGtv,CalcUpliftTV,DiscrepancyTV,resultOne,resultTwo;
    EditText RemainingET,DepartureET,TotUpliftET,SGet,CalcUpliftET,DiscrepancyET;
    Button calculateButton,okButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        setupView();

         final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
            LayoutInflater factory = LayoutInflater.from(this);        
            final View textEntryView = factory.inflate(R.layout.dialog,null);
        resultOne=(TextView)textEntryView.findViewById(R.id.resultOne); //resultone is a textview in xml dialog
        resultTwo=(TextView)textEntryView.findViewById(R.id.resultTwo);
        alert.setTitle("RESULT");
        alert.setIcon(R.drawable.ic_launcher);
        alert.setView(textEntryView);


        alert.setNeutralButton("OK", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                dialog.dismiss();

            }
        });








        calculateButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {


                if(validationET())
                {


                getETvalue();
                evaluation();
                CalcUpliftTV.setText(String.valueOf(CalUpliftResult));
                DiscrepancyTV.setText(String.valueOf(DiscResult));
                resultOne.setText("Calc. Uplift (KG)= "+String.valueOf(CalUpliftResult));
                resultTwo.setText("Discrepancy(%)= "+String.valueOf(DiscResult));
                    alert.show();




                }
                else
                    Toast.makeText(getApplicationContext(), "please give all inputs", Toast.LENGTH_SHORT).show();

            }


        });




    }
4

1 に答える 1

0

私はそれを修正しました。アラートダイアログは計算ボタンのonclick内に作成する必要があります。これにより、クリックするたびにダイアログが最初から作成され、以前のダイアログ値からの干渉が防止されます。修正されたコードセグメントは次のとおりです。

calculateButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {


        if(validationET())
        {

             final AlertDialog.Builder alert = new AlertDialog.Builder(context); 
                LayoutInflater factory = LayoutInflater.from(context);        
                final View textEntryView = factory.inflate(R.layout.dialog,null);
            resultOne=(TextView)textEntryView.findViewById(R.id.resultOne); //resultone is a textview in xml dialog
            resultTwo=(TextView)textEntryView.findViewById(R.id.resultTwo);
            alert.setTitle("RESULT");
            alert.setIcon(R.drawable.ic_launcher);
            alert.setView(textEntryView);


            alert.setNeutralButton("OK",null);




        getETvalue();
        evaluation();
        CalcUpliftTV.setText(String.valueOf(CalUpliftResult));
        DiscrepancyTV.setText(String.valueOf(DiscResult));
        resultOne.setText("Calc. Uplift (KG)= "+String.valueOf(CalUpliftResult));
        resultTwo.setText("Discrepancy(%)= "+String.valueOf(DiscResult));
        AlertDialog alertD = alert.create();
        alertD.show();






        }
        else
            Toast.makeText(getApplicationContext(), "please give all inputs", Toast.LENGTH_SHORT).show();

    }


});
于 2013-02-18T16:35:18.070 に答える