我对editText
进行了验证。如果editText
字段为空,则验证失败并停止用户转到另一个Activity
,因为需要值。怎么做?我知道这是一个基本问题,但我无法弄清楚如何做到这一点。
我的代码:
btninsert = (Button)findViewById(R.id.btn_insert);
btninsert.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
insertValues();
EditText userName = (EditText) findViewById(R.id.editText1);
if( userName.getText().toString().length() == 0 )
userName.setError( "First name is required!" );
Intent i = new Intent(getApplicationContext(), Login.class);
startActivity(i);
}
});
当点击此Button
时,用户将重定向到下一个屏幕,但如果验证失败,我需要保留当前Activity
,并且只有在验证成功时(即已经有值)他们进入下一个Activity
。
答案 0 :(得分:63)
很简单......检查你的EditText是否为空,如下面的例子所示。
if( TextUtils.isEmpty(userName.getText())){
/**
* You can Toast a message here that the Username is Empty
**/
userName.setError( "First name is required!" );
}else{
Intent i = new Intent(getApplicationContext(), Login.class);
startActivity(i);
}
答案 1 :(得分:7)
试试这个:
bt.setOnClickListener(new OnClickListener() {
public void onClick(View arg0)
{
String str=et.getText().toString();
if(str.equalsIgnoreCase(""))
{
et.setHint("please enter username");//it gives user to hint
et.setError("please enter username");//it gives user to info message //use any one //
}
else
{
Intent in=new Intent(getApplicationContext(),second.class);
startActivity(in);
}
}
});
答案 2 :(得分:5)
你也可以试试这个:
if ( ( userName.getText().toString().trim().equals("")) )
{
Toast.makeText(getApplicationContext(), "User name is empty", Toast.LENGTH_SHORT).show();
}
else
{
Intent i = new Intent(getApplicationContext(), Login.class);
startActivity(i);
}
答案 3 :(得分:3)
我理解这是一个古老的问题,但这可能会有所帮助,您可以使用.isEmpty()而不是.equals()
if( userName.getText().toString().isEmpty()){
/**
* You can Toast a message here that the Username is Empty
**/
userName.setError( "First name is required!" );
}else{
Intent i = new Intent(getApplicationContext(), Login.class);
startActivity(i);
}
答案 4 :(得分:2)
最好使用If条件测试空textField以获取所有必需或特殊验证案例并使用setError进行聚焦。
If(txtName.getText().toString().trim().equals(""))
{
//Your message or any other validation
}
答案 5 :(得分:2)
我遇到了一个类似的问题。在我的情况下,我有很多Edittexts来验证,有些是另一个布局的孩子。提示:所有视图必须位于同一根视图中。所以,简单来说:
...
LinearLayout viewGroup = (LinearLayout) findViewById(R.id.viewGroup);
checkFieldsRequired(viewGroup);
...
public boolean checkFieldsRequired(ViewGroup viewGroup){
int count = viewGroup.getChildCount();
for (int i = 0; i < count; i++) {
View view = viewGroup.getChildAt(i);
if (view instanceof ViewGroup)
checkFieldsRequired((ViewGroup) view);
else if (view instanceof EditText) {
EditText edittext = (EditText) view;
if (edittext.getText().toString().trim().equals("")) {
edittext.setError("Required!");
}
}
}
return false;
}
答案 6 :(得分:0)
我知道这是一篇过时的文章,但是我在我的应用程序中需要类似的功能,因此我决定开发一个简单但功能强大的验证器,以便于重复使用。
link for github repo 超级好用。
validateViewFields
方法并传递视图列表活动的代码示例:
public class AddContractActivity extends AppCompatActivity {
TextView contractDescriptionTextView;
TextView totalAmountTextView;
List<View> fieldsToBeValidated;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_contract);
contractDescriptionTextView = findViewById(R.id.contractDescriptionEditText);
totalAmountTextView = findViewById(R.id.totalAmountText);
fieldsToBeValidated = new ArrayList<>(Arrays.asList(
contractDescriptionTextView,
totalAmountTextView));
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!UIValidator.validateViewFields(fieldsToBeValidated, true)) {
Toast.makeText(AddContractActivity.this, "Missing Fields", Toast.LENGTH_SHORT).show();
mainScrollView.post(new Runnable() {
@Override
public void run() {
mainScrollView.smoothScrollTo(0, 0);
}
});
return;
}
}
});
}
}