动态添加时如何检查EditText是否有文本?

How to check EditText has text or not when added dynamically?

我使用布局充气器

添加了 3 个 EditTexts一个按钮

下面是我的java代码:

mAddButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
                    if (!et_boiler_make_boiler_row.getText().toString().equalsIgnoreCase("")) {
                        onAddNewClicked();
                        buttonRemove.setVisibility(View.VISIBLE);
                    } else {
                        Toast.makeText(ConsumerCompanyProfileDetails4.this, "Can not add more rows. :(",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
   private void onAddNewClicked() {
                LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View addView = layoutInflater.inflate(R.layout.boiler_row, null);

                buttonRemove = (ImageView) addView.findViewById(R.id.remove);
                et_boiler_make_boiler_row = (EditText) addView.findViewById(R.id.et_boiler_make_boiler_row);
                et_capacity_boiler_row = (EditText) addView.findViewById(R.id.et_capacity_boiler_row);
                et_estd_year_boiler_row = (EditText) addView.findViewById(R.id.et_estd_year_boiler_row);

                buttonRemove.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        ((LinearLayout) addView.getParent()).removeView(addView);
                    }
                });

                mContainerView.addView(addView);
            }

现在我想在添加新行之前检查所有 3 个 EditText 是否都具有某些值。即我想为在添加新行之前动态添加的 EditTexts 添加验证。

我还想知道如何从添加的 EditText 中获取值。

请帮忙!

将 edittext 视图保存在 List 中。在使用 for-each 添加新的编辑文本视图之前检查列表,并使用 edittext.getText().toString() 获取每个编辑文本的文本。现在您可以检查 isEmpty() 或您想要的任何内容。

您可以迭代 mContainerView childrens

for (int i = 0; i < mContainerView.getChildCount(); i++) { // check all rows
       View v = mContainerView.getChildAt(i);
       EditText editText = (EditText)view.findViewById(R.id.et_capacity_boiler_row);
        //do whatever you want
}

或者只是 select 最后一个索引

View v = mContainerView.getChildAt(mContainerView.getChildCount()-1);
EditText editText = (EditText)view.findViewById(R.id.et_capacity_boiler_row);
//do whatever you want

(假设 mContainerView 仅包含添加的视图)

有很多方法可以做到这一点,请查看我的以下解决方案。

在添加新行的同时,为所有编辑文本添加标签(某些值对所有内容都应该是唯一的)。 对于 exe ,

et_boiler_make_boiler_row = (EditText) addView.findViewById(R.id.et_boiler_make_boiler_row);
et_boiler_make_boiler_row.setTag(1);
et_capacity_boiler_row = (EditText) addView.findViewById(R.id.et_capacity_boiler_row);
et_capacity_boiler_row.setTag(1);
et_estd_year_boiler_row = (EditText) addView.findViewById(R.id.et_estd_year_boiler_row);
et_estd_year_boiler_row.setTag(1);

并在需要时检查标签并完成您的工作。

请试试这个...我想它会对你有所帮助。

String[] str = {"AAA","BBB","CCC"};
mAddButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if (!str[0].equalsIgnoreCase("") && !str[1].equalsIgnoreCase("") && !str[2].equalsIgnoreCase("")) {
            onAddNewClicked();
            str = {"","",""};
        } else {
            Toast.makeText(ConsumerCompanyProfileDetails4.this, "Can not add more rows. :(",
                        Toast.LENGTH_SHORT).show();
        }
    }
});

和类似的方法来检查黑色值是否可用。

private void onAddNewClicked() {
        LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View addView = layoutInflater.inflate(R.layout.boiler_row, null);

        ImageView buttonRemove = (ImageView) addView.findViewById(R.id.remove);
        EditText et_boiler_make_boiler_row = (EditText) addView.findViewById(R.id.et_boiler_make_boiler_row);
        EditText et_capacity_boiler_row = (EditText) addView.findViewById(R.id.et_capacity_boiler_row);
        EditText et_estd_year_boiler_row = (EditText) addView.findViewById(R.id.et_estd_year_boiler_row);

        et_boiler_make_boiler_row.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                str[0] = s;
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        et_capacity_boiler_row.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                str[1] = s;
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        et_estd_year_boiler_row.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                str[2] = s;
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        buttonRemove.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ((LinearLayout) addView.getParent()).removeView(addView);
            }
        });

        mContainerView.addView(addView);
}

在此解决方案中,您将检查用户是否输入了所有三个 EditText 值。 如果用户输入某些内容而不是将其删除,那么它也会为您提供空白值。 所以,它对你有帮助..我希望这个解决方案能够满足你的要求。