我在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
}

07-28 12:09