我在AlertDialog
窗口中有以下代码,我想让用户输入一个数字(我在int m_Text
中存储)。我有两个问题:我无法看到我输入的数字,如果我按下输入而没有任何数字,它就会崩溃。我该如何解决? (当我按下按钮时执行方法pressMe()
public void pressMe(){
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER );
AlertDialog.Builder myAlert = new AlertDialog.Builder(this);
myAlert.setMessage("Enter number:")
.setView(input)
.setPositiveButton("Enter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = Integer.parseInt(input.getText().toString());
Log.d(TAG," Number : "+m_Text");
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setTitle("Test")
.setIcon(R.drawable.ic_launcher)
.create();
myAlert.show();
}
答案 0 :(得分:1)
您的应用程序崩溃的原因在于:
Integer.parseInt(input.getText().toString());
当输入文本为空时,您尝试在整数上解析""
,然后获得NumberFormatException
。
你必须处理这种情况,例如在下面的代码中:
final String str = input.getText().toString().trim();
m_Text = str.length() == 0 ? 0 : Integer.parseInt(str);
或
final String str = input.getText().toString().trim();
if(str.length() != 0){
m_Text = Integer.parseInt(str);
}
我不明白你的第一个问题。如果你向我解释,我会帮助你。
<强>更新强> 当我尝试你的代码时,我得到如下结果:
答案 1 :(得分:0)
阅读本文档 http://developer.android.com/guide/topics/ui/dialogs.html
如果您想在应用程序中使用任何类型的对话框。
1)创建一个将扩展DialogFragment类的类。
2)覆盖onCreateDialog()方法和内部编写正面按钮和负面按钮的代码
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_fire_missiles)
.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
3)使用此代码从HostActivity调用Fragment
DialogFragment newFragment = new YourFragmentClass();
newFragment.show(getSupportFragmentManager(), "missiles");
如果你想要一个CustomLayout那么
1)在res-&gt; customLayout.xml中创建一个XML文件,并在那里放置您想要的视图(在您的情况下在该布局上绘制单个EditText),不要为正面或负面按钮添加按钮它们已经是由DialogFragment添加。
2)在dialogFragment的onCreateDialog()里面做这样的事情
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
final EditText et_text=(EditText)getActivity().findViewById(R.id.editTextId);
builder.setView(inflater.inflate(R.layout.custom_layout, null))
// Add action buttons
.setPositiveButton(R.string.send, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
String mob=et_text.getText().toString();
//Do What you want to do with EditText
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Coding for Negative Button Here
}
});
return builder.create();
}
您可以将EventBack传递给托管活动。 阅读参考文件
希望这会对你有所帮助