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(),您能编写更正并重新发布代码吗?