在我的项目中,有一个按钮,使用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);
}
}
答案 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
EditText
长N
,然后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..
}
}