我创建了一些动态的EditText文件和一个使用foreach循环的按钮,代码如下:
void callDynamicView(){
String configText="Building Name, S, 10; No: of Floors, I, 3; Area of Plot, D, 10; Location(X), L, 15.3; Location(Y), L, 15.3; Photo, P, 10";
String[] splits = configText.split(";");
ScrollView sv = new ScrollView(this);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
TextView tv = new TextView(this);
tv.setText("Survey");
tv.setTextColor(Color.rgb(200,0,0));
ll.addView(tv);
for(String splitSemi: splits){
String[] splitsCommas = splitSemi.split(",");
int len = splitsCommas[1].length();
//Toast.makeText(getBaseContext(), len, Toast.LENGTH_SHORT).show();
if(splitsCommas[1].equals("P")){
Toast.makeText(getBaseContext(), "Keri", Toast.LENGTH_SHORT).show();
Button btn = new Button(this);
btn.setText("Photo");
ll.addView(btn);
//this.setContentView(sv);
}
else{
//Toast.makeText(getBaseContext(), "else", Toast.LENGTH_SHORT).show();
TextView txtv = new TextView(this);
txtv.setText(splitsCommas[0]);
ll.addView(txtv);
EditText et = new EditText(this);
ll.addView(et);
}
}
Button btn = new Button(this);
btn.setText("Submit");
ll.addView(btn);
this.setContentView(sv);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(getBaseContext(), et.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
我想在按钮点击中访问所有输入的值。但我无法得到这些价值观。 我检查了varios的可能性。我是新手动态创建UI。可以帮帮我们吗?
答案 0 :(得分:3)
将EditText
的ID设置如下...并将这些ID存储在List
中,以便稍后检索它们。
List<Integer> editTextIdList = new ArrayList<Integer>();
int id = 0;
for(String splitSemi: splits){
String[] splitsCommas = splitSemi.split(",");
int len = splitsCommas[1].length();
//Toast.makeText(getBaseContext(), len, Toast.LENGTH_SHORT).show();
if(splitsCommas[1].equals("P")){
.....
}
else{
//Toast.makeText(getBaseContext(), "else", Toast.LENGTH_SHORT).show();
TextView txtv = new TextView(this);
txtv.setText(splitsCommas[0]);
ll.addView(txtv);
EditText et = new EditText(this);
et.seId(id);
editTextIdList.add(id);
ll.addView(et);
id++;
}
}
在使用这些ID的OnClickListener
...创建EditText
实例并获取其文字如下...
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i < editTextIdList.size(); i++) {
EditText editText = (EditText)findViewById(editTextIdList.get(i));
String text = editText.getText().toString();
}
// Toast.makeText(getBaseContext(), et.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
答案 1 :(得分:1)
只需在类级别声明以下变量,
TextView tv;
TextView txtv;
EditText et;
答案 2 :(得分:1)
不要在循环中声明Button,TextView和EditText,而是在onCreate()方法上面声明它。您可以随意将其初始化。
public class YourClass(){
TextView tv;
Button btn;
EditText edt;
/* your onCreate() and all other codes here*/
.....................
.....................
public void callDynamicView(){
/* Initialize and create your view here */
}
}
您可以直接访问班级中的TextView,Button and EditText
答案 3 :(得分:1)
setId到你的editText和onClick of button do:
EditText editText =(EditText) context.findViewById(id);
String result = editText.getText().toString();
或使用
ArrayList<EditText> editTextList = new ArrayList<EditText>();
在for循环中添加editText
editTextList.add(i,new EditText(context));
获取价值
editTextList.get(i).getText().toString();
答案 4 :(得分:1)
String strtextview = txt.gettext。 toString();
String strbtnText = btn.gettext。的toString();
答案 5 :(得分:1)
你可以这样做:
- 在
TextView
或EditText
的每次创作中,指定一个ID 观点。- 将
TextView
或EditText
添加到相同类型的列表中,即。List<EditText>
- 点击
醇>Button
点击,获取TextView
或EditText
的值 添加到列表中。
就像:
for(int i=0;i<arrayListOfViews.size();i++) {
EditText editObj = arrayList.get(i);
String val = editObj.getText().toString();
}
希望有所帮助!