Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮在第二次单击时崩溃,removeView()异常_Java_Android_Logcat - Fatal编程技术网

Java 按钮在第二次单击时崩溃,removeView()异常

Java 按钮在第二次单击时崩溃,removeView()异常,java,android,logcat,Java,Android,Logcat,当我第一次单击“计算”按钮时,它工作正常,但在结果对话框关闭后第二次单击时,应用程序崩溃。logcat显示错误指定的子级已经有父级。您必须先调用孩子父母的removeView。我现在该怎么办?如何添加removeView public class MainActivity extends Activity { float Remaining,Departure,TotUplift,SG,DiscResult; int CalUpliftResult; TextView

当我第一次单击“计算”按钮时,它工作正常,但在结果对话框关闭后第二次单击时,应用程序崩溃。
logcat
显示错误指定的子级已经有父级。您必须先调用孩子父母的
removeView。
我现在该怎么办?如何添加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();

            }


        });




    }

我修复了它,alertdialog必须在单击calculate按钮时创建,这样每次单击它时,对话框都会被重新创建,从而防止以前对话框值的干扰。以下是更正后的代码段:

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();

    }


});

请添加完整的代码。当viewGroup已经存在并且重新添加到同一活动中时,会发生这种情况。在对话框中尝试RemoveAllViews()。这将解决问题。代码可能缺少有关错误的提示。顺便说一句,您不必在alertDialog的按钮上调用Dismise,您甚至可以将null设置为其侦听器。因此,alertDialog在其任何按钮的onclick上都会自动取消?我不能使用removeAllViews(),您能编写更正并重新发布代码吗?