我在Android应用程序中有一个表单,用于为特定运动设置比赛。我能够成功验证输入以排除东西(使用TextWatcher),但不能强制执行最小输入。
尽管XML中有一种方法可以使某个字段中的输入最少,但我还是希望以编程方式进行此操作。而且,仍然有人可以完全忽略这些字段,只需按一下按钮即可开始比赛(这将导致应用程序崩溃)。
如果有人有任何建议,我将不胜感激-似乎在网上没有有关此信息的大量信息(或者我一直在寻找错误的方式)。
为了简单起见,我以表格的形式(teamA名称和matchlength)排除了除两个字段之外的所有字段(字符串和整数是唯一的输入“类型”)。
public class MatchConfig extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_match_config);
// Show the Up button in the action bar.
setupActionBar();
final Context context = getApplicationContext();
final EditText teamA = (EditText) findViewById(R.id.teamA_editText); //Team A input
teamA.addTextChangedListener(new TextWatcher(){
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{}
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after)
{}
@Override
public void afterTextChanged(Editable s) //Team A validation
{
String filtered_str = s.toString();
if (filtered_str.matches(".*[^A-Za-z^0-9].*")) { //if not alphanumeric
filtered_str = filtered_str.replaceAll("[^A-Za-z^0-9]", "");
s.clear();
s.append(filtered_str);
// s.insert(0, filtered_str);
Toast.makeText(context, //warning Toast
"Only letters and numbers are allowed!",
Toast.LENGTH_SHORT).show();
}
}
});
final EditText matchlength = (EditText) findViewById(R.id.stones_editText); //matchlength input
matchlength.addTextChangedListener(new TextWatcher(){
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{}
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after)
{}
@Override
public void afterTextChanged(Editable s) //matchlength validation
{
int no=Integer.parseInt(s.toString());
if(no>999)
{
s.replace(0,s.length(), "999");
Toast.makeText(context,
"999 minutes is max length!",
Toast.LENGTH_SHORT).show();
}
}
});
final EditText location = (EditText) findViewById(R.id.location_editText);
Button start = (Button) findViewById(R.id.start_button);
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent theIntent = new Intent(MatchConfig.this, MatchTimer.class);
theIntent.putExtra("teamAvar", teamA.getText().toString());
theIntent.putExtra("matchlengthVar", Integer.parseInt(matchlength.getText().toString()));
startActivity(theIntent);
//this finish() will close the MatchConfig Activity when start button will be pressed
finish();
}
});
最佳答案
单击开始按钮时检查长度:
if(teamA.getText().length() < 5){ //5 char min
//Show error
}
else{
//Do match
}