我使用自定义布局创建了一个自定义的多个EditText字段。现在问题是当用户点击时,不知道如何从这些EditText中获取数据。这是按钮。
b.setId(MY_BUTTON);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast toast;
Log.w(TAG, "View Id: " + v.getId());
toast = Toast.makeText(getApplicationContext(),"Cliquer",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25,400);
toast.show();
saveForm();
final Map<String, String> params = new HashMap<String, String>();
LinearLayout root = (LinearLayout) findViewById(R.id.linearLayout1);
View tempView;
String assembledString = "";
for (int i = 0; i < root.getChildCount(); i++) {
tempView = root.getChildAt(i);
if (tempView instanceof EditText) {
assembledString += ((EditText) tempView)
.getText().toString();
params.put(name,assembledString);
Log.d(TAG,"Data EditText : "+ assembledString);
}
/*
* EditText et = (EditText)
* ((ViewGroup
* )v.getParent()).getChildAt
* (i);
*/
}
savePost(action, params);
}
});
ll.addView(b);
我解决了我的问题
这是解决方案
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast toast;
Log.w(TAG, "View Id: " + v.getId());
toast = Toast.makeText(getApplicationContext(),"Cliquer",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25,400);
toast.show();
LinearLayout container = (LinearLayout) findViewById(R.id.linearLayout2);
ViewGroup parent = container ;
String[] array = new String[parent.getChildCount()];
String[] arrayFields = new String[parent.getChildCount()];
Map<String, String> params = new HashMap<String, String>();
for (int i=0; i < parent.getChildCount(); i++){
View child = parent.getChildAt(i);
if (child instanceof EditText)
{
EditText et = (EditText) child;
array[i] = et.getText().toString();
arrayFields[i] = et.getTag().toString();
params.put( arrayFields[i], array[i]);
Log.d(TAG , "array : " + array[i]);
Log.d(TAG , "arrayFields: " + arrayFields[i]);
Log.d(TAG , "paramsString : " + params);
}
else { Log.d(TAG , "Mes autres Views : " + child );}
}
savePost(action, params);
}
});
ll.addView(b);
答案 0 :(得分:0)
您只需要更改以下行。
final Map<String, String> params = new HashMap<String, String>();
。通过强>
Map<String, String> params = new HashMap<String, String>();
答案 1 :(得分:0)
您的问题只能通过标记来解决。 使用 editText.setTag(position)保存位置,因为我显示或保存对象ID,无论你喜欢什么。
示例:
List<EditText> editTextList = new ArrayList<>();
for(EditText et : editTextList){
String tempString = et.getText().toString();
params.put(name, tempString);
}
现在你得到了你想要的东西。 :)
//这就是我解决的方法
您还可以使用列表保存EditTexts。
首先,在创建后将EditText添加到列表中。
其次,使用 editText.setTag(position)保存位置,因为我显示或保存对象ID,无论你喜欢什么。
在按钮上单击,您可以从EditText列表中获取数据。您还可以从EditText的标签中了解位置或ID。
希望这会对你有所帮助。这就是我解决的方式。
您的示例代码
List<EditText> editTextList = new ArrayList<>();
b.setId(MY_BUTTON);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast toast;
Log.w(TAG, "View Id: " + v.getId());
toast = Toast.makeText(getApplicationContext(),"Cliquer",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25,400);
toast.show();
saveForm();
final Map<String, String> params = new HashMap<String, String>();
for(EditText et : editTextList){
assembledString = et.getText().toString();
params.put(name, assembledString);
}
savePost(action, params);
}
});
ll.addView(b);