除非整个盒子都填满,否则不要去下一个活动

时间:2013-11-30 20:21:56

标签: java android validation onclick android-edittext

我制作了一个应用程序,用于计算另一个活动中出现的值字符串。我的应用有3个editTexts和一个button。如果我们按下编辑文本中的输入按钮calculate,计算值将显示在第二个活动中。我成功了但问题是如果用户将任何一个框留空并按下按钮,系统将强制关闭。为了避免这种情况,我在预先输入了一个提示的图形布局中editText。但是如果用户在编辑editText之后意外按下按钮,系统会显示强制关闭。 我尝试了很多if else方法,但它不起作用。有人向我展示了检查所有editText框的正确方法。

public class Screen1 extends Activity {

public static StringBuilder EXTRA_MESSAGE=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.screen1);
    Button bu1= (Button)findViewById(R.id.bu);
    bu1.setOnClickListener(new View.OnClickListener()
    {
                    @Override
        public void onClick(View message)
        {    int f1,f3,f4; 
            String vis;
             EditText t1=(EditText)findViewById(R.id.a);
             EditText t3=(EditText)findViewById(R.id.c);
             EditText t4=(EditText)findViewById(R.id.d);
            String e1=t1.getText().toString();
            String e3= t3.getText().toString();
            String e4= t4.getText().toString(); 
f1 =Integer.parseInt(e1);
f4=Integer.parseInt(e4);
f3=Integer.parseInt(e3);
     StringBuilder sb = new StringBuilder();
    for( float i= (float)0.1;i<=5;i=i+(float) .1)
    { 

    sb.append(String.format("%.1f", i)+" mcg = "+(f1*60*i*f4)/(f3*1000)+"\n");
    }
vis=sb.toString();
    Intent intent = new Intent(message.getContext(),Screen2.class);

     intent.putExtra("EXTRA_MESSAGE",vis);
startActivity(intent);
        }       

});     
}
}

2 个答案:

答案 0 :(得分:2)

使用[TextUtils][1]中的isEmpty()检查onClick文字:

@Override
public void onCreate(Bundle savedInstanceState){
     EditText t1=(EditText)findViewById(R.id.a);
     EditText t3=(EditText)findViewById(R.id.c);
     EditText t4=(EditText)findViewById(R.id.d);

     Button bu1 = (Button) findViewById(R.id.bu);
     bu1.setOnClickListener(this);
}    

@Override
public void onClick(View message){  
     boolean foundEmpty = false;

     if(TextUtils.isEmpty(t1.getText())) {
         foundEmpty = true;
         t1.setError("Please Enter a value");
     }

     if(TextUtils.isEmpty(t2.getText()){
        foundEmpty = true;
        t2.setError("Please Enter a value");
     }

     if(TextUtils.isEmpty(t3.getText()){
        foundEmpty = true;
        t3.setError("Please enter a value");
     }

     if(!foundEmpty){
         /* none of your text fields are empty */
         int f1, f3, f4; 

         f1 =Integer.parseInt(e1);
         f4=Integer.parseInt(e4);
         f3=Integer.parseInt(e3);

         final StringBuilder sb = new StringBuilder();
         for( float i= (float)0.1;i<=5;i=i+(float) .1) { 
               sb.append(String.format("%.1f", i)+
                    " mcg = "+
                    (f1*60*i*f4)/(f3*1000)+"\n");
         }

         final String vis = sb.toString();
         Intent intent = new Intent(message.getContext(), Screen2.class);
         intent.putExtra("EXTRA_MESSAGE", vis);
         startActivity(intent);
    }       
}

答案 1 :(得分:0)

根据您从问题中收集的信息,单击bu1时出现错误,并且至少有一个EditTexts为空。这是因为您在空字符串上调用Integer.parseInt()。以下代码将检查框是否为空,并显示Toast(如果有)。如果用户输入的内容不是有效数字,它也会显示Toast:

public class Screen1 extends Activity
{
    private static final String EXTRA_MESSAGE = "extra_msg";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen1);

        final EditText t1 = (EditText)findViewById(R.id.a);
        final EditText t3 = (EditText)findViewById(R.id.c);
        final EditText t4 = (EditText)findViewById(R.id.d);

        Button bu1 = (Button)findViewById(R.id.bu);
        bu1.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View message)
                {
                    int f1,f3,f4; 
                    String e1 = t1.getText().toString();
                    String e3 = t3.getText().toString();
                    String e4 = t4.getText().toString();

                    if (e1.equals("") || e3.equals("") || e4.equals(""))
                    {
                        Toast.makeText(Screen1.this, "Please enter all numbers.", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    try
                    {
                        f1 = Integer.parseInt(e1);
                        f4 = Integer.parseInt(e4);
                        f3 = Integer.parseInt(e3);

                        StringBuilder sb = new StringBuilder();
                        for (float i = 0.1f; i <= 5; i = i + .1f)
                        { 
                            sb.append(String.format("%.1f", i) + " mcg = " + (f1 * 60 * i * f4) / (f3 * 1000) + "\n");
                        }

                        Intent intent = new Intent(Screen1.this, Screen2.class);
                        intent.putExtra(EXTRA_MESSAGE, sb.toString());
                        startActivity(intent);
                    }
                    catch (NumberFormatException e)
                    {
                        Toast.makeText(Screen1.this, "Invalid numbers.", Toast.LENGTH_SHORT).show();                            
                    }
                }       
            }
        );     
    }
}