从有效的 `Edittext` 中获取字符串

Getting strings from `Edittext` thats valid

我有5个Edittexts和最后一个TextView来计算EditTexts中数据的平均值。我怎么能只除以里面只有输入的EditTexts的个数呢?现在我除以总数 EditTexts,即 5.

public class app extends ActionBarActivity {
EditText et1;
EditText et2;
EditText et3;
EditText et4;
EditText et5;
TextView sum;
double a;
double b;
double c;
double d;
double e;
double f;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_app);
    et1 = (EditText) findViewById(R.id.et1);
    et2 = (EditText) findViewById(R.id.et2);
    et3 = (EditText) findViewById(R.id.et3);
    et4 = (EditText) findViewById(R.id.et4);
    et5 = (EditText) findViewById(R.id.et5);
    sum = (TextView) findViewById(R.id.sum);
    sum.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (et1.getText().toString().isEmpty() || 
            et2.getText().toString().isEmpty() || 
            et3.getText().toString().isEmpty() || 
            et4.getText().toString().isEmpty() ||
            et5.getText().toString().isEmpty()) {
                return;
            }
            else {
            a = Double.parseDouble(et1.getText().toString());
            b = Double.parseDouble(et2.getText().toString());
            c = Double.parseDouble(et3.getText().toString());
            d = Double.parseDouble(et4.getText().toString());
            e = Double.parseDouble(et5.getText().toString());
            f = (a+b+c+d+e) / 5;
            sum.setText(Double.toString(f));}
        }
    });
}

试一试,看看效果如何...这将从父布局中获取所有 EditText 并确定其中是否包含某些内容。然后从那里进行计算。未测试只是快速类型。

int count;
double totals;
double finaltotal;

View parent = findViewById(R.id.parent_layout);

for(int i = 0; i < parent.getChildCount(); i++) {
View singleChild = parent.getChildAt(i);
    if(singleChild instanceof EditText) {
        EditText mEditText = (EditText)singleChild;
        if(mEditText.getText().length() >  0){
            count = count + 1;
            totals = totals + Double.parseDouble(mEditText.getText().toString());
        } 
    }
}
finaltotal = totals / count;
sum.setText(Double.toString(finaltotal));

如果您只有 5 个,并且您打算只拥有其中的 5 个,您可以轻松地做类似的事情:

et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
et4 = (EditText) findViewById(R.id.et4);
et5 = (EditText) findViewById(R.id.et5);

int b1 = et1.getText().toString().isEmpty() ? 1 : 0;
int b2 = et2.getText().toString().isEmpty() ? 1 : 0;
int b3 = et3.getText().toString().isEmpty() ? 1 : 0;
int b4 = et4.getText().toString().isEmpty() ? 1 : 0;
int b5 = et5.getText().toString().isEmpty() ? 1 : 0;

int sum = b1 + b2 + b3 + b4 + b5 ;

但是如果你现在有 5 个,建议将它们存储在数组中并在 for 循环中(几乎相同的代码)

int sum = 0;
for (EditText e : list) {
   sum = sum + e.getText().toString().isEmpty() ? 1 : 0;
}

创建一个EditTexts列表,然后只从不为空且具有有效值的那些中取值。如下所示,使用单击按钮进行计算。

public class Main extends Activity {

EditText ed1, ed2, ed3, ed4, ed5;
TextView sum;
Button button;

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

    ed1 = (EditText) findViewById(R.id.editText);
    ed2 = (EditText) findViewById(R.id.editText2);
    ed3 = (EditText) findViewById(R.id.editText3);
    ed4 = (EditText) findViewById(R.id.editText4);
    ed5 = (EditText) findViewById(R.id.editText5);

    sum = (TextView) findViewById(R.id.textView);

    button = (Button) findViewById(R.id.button);

    final List<EditText> editTexts = new ArrayList<>();
    editTexts.add(ed1);
    editTexts.add(ed2);
    editTexts.add(ed3);
    editTexts.add(ed4);
    editTexts.add(ed5);

    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            int count = 0;
            double total = 0;
            double doubleSum = 0;

            for (EditText editText : editTexts)
            {
                if (!editText.getText().toString().isEmpty())
                {
                    if (isDouble(editText.getText().toString()))
                    {
                        total = total + Double.parseDouble(editText.getText().toString());
                        count++;
                    }
                }
            }

            if (total != 0) doubleSum = total / count;
            sum.setText(Double.toString(doubleSum));
        }
    });
}

public boolean isDouble(String string)
{
    try
    {
        double mDouble = Double.parseDouble(string);
        return true;
    } catch (Exception e) {
        return false;
    }
}
}