获取以编程方式创建的Edittext的值

时间:2017-04-20 18:36:03

标签: android

在我的项目中,有一个按钮,使用foor循环以编程方式创建Edittex,具体取决于用户添加的数字,我不知道如何获取每个的值。我的问题是

  

如何获得我创建的组件的价值   编程?

任何建议都要提前得到赞赏。

private void setChoices() {

        layout = (LinearLayout) findViewById(R.id.linearLayout);
        params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.CENTER;
        int marginPixel = 1;
        int marginPixell = 5;
        float densityy =getResources().getDisplayMetrics().density;
        int marginDp = (int)(marginPixel * densityy);
        int margin = (int)(marginPixell * densityy);
        params.setMargins(marginDp, margin, marginDp, margin);


        int num= Integer.parseInt(choicesNumberEDT.getText().toString());


        for (int i = 0; i < num; i++) {

            explanationED= new EditText(this);
            explanationED.setLayoutParams(params);
            layout.addView(explanationED);
            explanationED.setGravity(Gravity.TOP);
            explanationED.setHint("أكتب هنا.....");
            explanationED.setTextSize(14);
            explanationED.setId(i);
            float density = getResources().getDisplayMetrics().density;
            int paddingDp = (int) (Const.paddingPixel * density);
            explanationED.setBackgroundColor(Color.parseColor("#B2E3CC"));
            explanationED.setPadding(paddingDp, paddingDp, paddingDp, paddingDp);

        }


    }

2 个答案:

答案 0 :(得分:0)

我想你想获得动态创建的EditTexts的值。您当前替换了每个创建的EditText实例。请尝试以下代码:

        List<EditText> editTextList = new ArrayList<>();

        private void setChoices() {

        layout = (LinearLayout) findViewById(R.id.linearLayout);
        params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.CENTER;
        int marginPixel = 1;
        int marginPixell = 5;
        float densityy =getResources().getDisplayMetrics().density;
        int marginDp = (int)(marginPixel * densityy);
        int margin = (int)(marginPixell * densityy);
        params.setMargins(marginDp, margin, marginDp, margin);


        int num= Integer.parseInt(choicesNumberEDT.getText().toString());


        for (int i = 0; i < num; i++) {

            EditText explanationED= new EditText(this);
            explanationED.setLayoutParams(params);
            editTextList.add(explanationED); //<-------new line here
            layout.addView(explanationED);
            explanationED.setGravity(Gravity.TOP);
            explanationED.setHint("أكتب هنا.....");
            explanationED.setTextSize(14);
            explanationED.setId(i);
            float density = getResources().getDisplayMetrics().density;
            int paddingDp = (int) (Const.paddingPixel * density);
            explanationED.setBackgroundColor(Color.parseColor("#B2E3CC"));
            explanationED.setPadding(paddingDp, paddingDp, paddingDp, paddingDp);

        }


    }


private EditText getText(int position) {
     return editTextList.get(position).getText().toString();
}

如果您不想保留EditTexts的列表,可以使用以下命令为您创建的每个EditText设置标记:

    editText.setTag("tag");

然后使用以下方法检索它:

    layout.findViewWithTag("tag");

答案 1 :(得分:0)

每次在循环中创建新对象时,都会将其分配给同一个EditText对象explanationED。这就是为什么每当您想要从getText()对象explanationED时,您将始终获得最后EditText的文本。
对于这种情况,
我们考虑List EditTextN,然后id给每个列表项EditText。现在,从这些ID's中,您可以获得任何EditText对象的值。

//e.g
list.get(i).getText().toString(); //getting value via index

//you may search for a specific Id.
for(EditText text: list) {
  if(text.getId() === MY_ID) {
   // do something..
  }
}