Java 警报对话框中编辑文本框的空验证-Android
我正在尝试向警报对话框中的编辑文本字段添加一些文本验证。它会提示用户输入名称 我想添加一些验证,这样,如果他们输入的内容为空或null,除了创建一个Toast saying error之外,它不会做任何事情 到目前为止,我已经:Java 警报对话框中编辑文本框的空验证-Android,java,android,validation,alert,Java,Android,Validation,Alert,我正在尝试向警报对话框中的编辑文本字段添加一些文本验证。它会提示用户输入名称 我想添加一些验证,这样,如果他们输入的内容为空或null,除了创建一个Toast saying error之外,它不会做任何事情 到目前为止,我已经: AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Record New Track"); alert.setMessage("Please Nam
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Record New Track");
alert.setMessage("Please Name Your Track:");
// Set an EditText view to get user input
final EditText trackName = new EditText(this);
alert.setView(trackName);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String textString = trackName.getText().toString(); // Converts the value of getText to a string.
if (textString != null && textString.trim().length() ==0)
{
Context context = getApplicationContext();
CharSequence error = "Please enter a track name" + textString;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, error, duration);
toast.show();
}
else
{
SQLiteDatabase db = waypoints.getWritableDatabase();
ContentValues trackvalues = new ContentValues();
trackvalues.put(TRACK_NAME, textString);
trackvalues.put(TRACK_START_TIME,tracktimeidentifier );
insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues);
}
但这只是关闭警报对话框,然后显示Toast。我希望警报对话框仍在屏幕上
谢谢我认为您应该重新创建
对话框
,因为在onClick()
中作为参数提供的对话框界面
似乎没有给您停止关闭对话框的选项
我也有一些建议给你:
尝试使用Activity.onCreateDialog()
,Activity.onPrepareDialog()
,当然还有Activity.showDialog()
。它们使对话框的使用更加容易(至少对我来说),而且对话框的使用看起来更像菜单的使用。使用这些方法,您还可以更轻松地再次显示对话框
我想给你小费。这不是对你问题的回答,但在回答中这样做更具可读性
您不必持有对AlertDialog.Builder()
对象的引用,只需执行以下操作:
new AlertDialog.Builder(this)
.setTitle("Record New Track")
.setMessage("Please Name Your Track:")
//and some more method calls
.create();
//or .show();
为您节省引用和大量键入;)。(几乎?)所有AlertDialog.Builder
方法都返回一个AlertDialog.Builder
对象,您可以直接在该对象上调用方法
这同样适用于Toast
s:
Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show();
您应该做的是创建一个自定义xml布局,包括一个文本框和一个Ok按钮,而不是使用.setPositiveButton。
然后,您可以向按钮添加单击侦听器,以验证数据并关闭对话框
它应在CreateDialog中使用:
protected Dialog onCreateDialog(int id)
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (id==EDIT_DIALOG)
{
final View layout = inflater.inflate(R.layout.edit_dialog, (ViewGroup) findViewById(R.id.Layout_Edit));
final Button okButton=(Button) layout.findViewById(R.id.Button_OkTrack);
final EditText name=(EditText) layout.findViewById(R.id.EditText_Name);
okButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
String textString = trackName.getText().toString();
if (textString != null && textString.trim().length() ==0)
{
Toast.makeText(getApplicationContext(), "Please enter...", Toast.LENGTH_LONG).show();
} else
removeDialog(DIALOG_EDITTRACK);
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Edit text");
AlertDialog submitDialog = builder.create();
return submitDialog;
}
我在类中创建了一个新方法来显示警报,并将创建警报的所有代码放在该方法中。然后在叫完祝酒词之后,我叫这个方法。假设我将该方法命名为createAlert(),那么
createAlert(){
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Record New Track");
alert.setMessage("Please Name Your Track:");
// Set an EditText view to get user input
final EditText trackName = new EditText(this);
alert.setView(trackName);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String textString = trackName.getText().toString(); // Converts the value of getText to a string.
if (textString != null && textString.trim().length() ==0)
{
Context context = getApplicationContext();
CharSequence error = "Please enter a track name" + textString;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, error, duration);
toast.show();
createAlert();
}
else
{
SQLiteDatabase db = waypoints.getWritableDatabase();
ContentValues trackvalues = new ContentValues();
trackvalues.put(TRACK_NAME, textString);
trackvalues.put(TRACK_START_TIME,tracktimeidentifier );
insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues);
}
}
使用此代码显示对话框
public void onClick(DialogInterface dialog, int whichButton) {
String textSt`enter code here`ring = trackName.getText().toString(); // Converts the value of getText to a string.
if (textString != null && textString.trim().length() ==0)
{
Context context = getApplicationContext();
CharSequence error = "Please enter a track name" + textString;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, error, duration);
toast.show();
new AlertDialog.Builder(this)
.setTitle("Message")
.setMessage("please enter valid field")
.setPositiveButton("OK", null).show();
}
这将为您创建一个对话框,editText
为空,或者您需要什么条件。//如果视图未实例化,则editText值始终返回null
View v = inflater.inflate(R.layout.new_location_dialog, null);
builder.setView(v);
final EditText titleBox = (EditText)v.findViewById(R.id.title);
final EditText descriptionBox = (EditText)v.findViewById(R.id.description);
尽管这是一篇老文章,但下面的代码将帮助某些人。我使用了定制的布局和扩展的DialogFragment类
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get the layout inflater
LayoutInflater inflater = requireActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.Name_of_the_customized_layout, null);
final EditText etxtChamp = view.findViewById(R.id.editText);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Enter a Name")
.setTitle("Mandatory field ex.");
builder.setView(view);
final Button btnOk = view.findViewById(R.id.ok);
final Button btnCancel = view.findViewById(R.id.cancel);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(etxtChamp.getText().toString().isEmpty()){
etxtChamp.setError("Oups! ce champ est obligatoire!");
}else{
//Get the editText content and do whatever you want
String messageEditText = etxtChamp.getText().toString();
dismiss();
}
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
return builder.create();
}