从 android 中动态创建的 edittext 获取值?
Get value from edittext created dynamically in android?
我已经用从服务器收到的 JSON 创建了 UI,
我能够根据收到的数据成功创建输入。
(我必须根据数据创建输入字段)
如何在单击按钮时为每个 editText 调用 getText()?
任何帮助都会有用。
代码:
(主要activity)
<ListView
android:padding="@dimen/_8sdp"
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
<Button
android:layout_alignParentBottom="true"
android:id="@+id/addnew"
android:textColor="#000000"
android:text="Save"
android:onClick="saveData"
android:layout_width="match_parent"
android:layout_height="50dp"/>
代码(在适配器中)
<RelativeLayout
android:id="@+id/r1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_margin="@dimen/_8sdp"
android:paddingStart="@dimen/_16sdp"
android:paddingEnd="@dimen/_16sdp"
android:id="@+id/editText"
android:importantForAutofill="no"
android:maxLength="35"
android:textColorHint="#66000000"
android:textColor="#66000000"
android:background="@drawable/rounded_edittext"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</RelativeLayout>
以上字段是使用Adapter动态生成的,
我需要在单击按钮时获取输入的值。
注意:
按钮在主页上,输入字段来自适配器和 JSON 循环
希望您理解我的担忧。
感谢您的帮助。
我想你想在所有输入字段序列中获取文本,如果是这样,在你的 json 你需要为每个输入字段添加 id,每个输入字段都有一个唯一的 id
例如,对于上面的屏幕截图,我想 json 将是
[
"input_field_1": {
"id": "ipf_1",
"hint": "Title",
"other_data": "..."
},
"input_field_2": {
"id": "ipf_2",
"hint": "URL",
"other_data": "..."
},
"input_field_3": {
"id": "ipf_3",
"hint": "Username",
"other_data": "..."
},
" input_field_4 ": {
" id ": " ipf_4 ",
" hint ": " Password ",
" other_data ": "..."
]
所以代码应该像 (kotlin):
val listValue = ArrayList<String>()
val jsonArray = your_json_array
for (i in 1..jsonArray.length()) {
listValue.add(findViewById(getResources().getIdentifier(jsonArray[i].id, "id", context.getPackageName()))?.text?.toString())
}
yourButton.setOnClickListener {
//get value as your requirement
for (value in listValue) {
Log.d("TAG", "value is $value")
}
}
Java代码:
void parseJson() {
String json = "[\n" +
"\"input_field_1\": {\n" +
" \"id\": \"ipf_1\",\n" +
" \"hint\": \"Title\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\"input_field_2\": {\n" +
" \"id\": \"ipf_2\",\n" +
" \"hint\": \"URL\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\"input_field_3\": {\n" +
" \"id\": \"ipf_3\",\n" +
" \"hint\": \"Username\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\" input_field_4 \": {\n" +
" \" id \": \" ipf_4 \",\n" +
" \" hint \": \" Password \",\n" +
" \" other_data \": \"...\"\n" +
"]";
final ArrayList<String> listValue = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String idName = jsonObject.getString("id");
int id = getResources().getIdentifier(idName, "id", getPackageName());
listValue.add(((EditText) findViewById(id)).getText().toString());
}
findViewById(R.id.yourButtonId).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < listValue.size(); i++) {
Log.d("TAG", "value is: " + listValue.get(i));
}
}
});
} catch (Exception e) {
Log.e("TAG", "error is: " + e.getMessage());
}
}
我已经用从服务器收到的 JSON 创建了 UI,
我能够根据收到的数据成功创建输入。 (我必须根据数据创建输入字段)
如何在单击按钮时为每个 editText 调用 getText()?
任何帮助都会有用。
代码: (主要activity)
<ListView
android:padding="@dimen/_8sdp"
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" />
<Button
android:layout_alignParentBottom="true"
android:id="@+id/addnew"
android:textColor="#000000"
android:text="Save"
android:onClick="saveData"
android:layout_width="match_parent"
android:layout_height="50dp"/>
代码(在适配器中)
<RelativeLayout
android:id="@+id/r1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_margin="@dimen/_8sdp"
android:paddingStart="@dimen/_16sdp"
android:paddingEnd="@dimen/_16sdp"
android:id="@+id/editText"
android:importantForAutofill="no"
android:maxLength="35"
android:textColorHint="#66000000"
android:textColor="#66000000"
android:background="@drawable/rounded_edittext"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</RelativeLayout>
以上字段是使用Adapter动态生成的, 我需要在单击按钮时获取输入的值。
注意: 按钮在主页上,输入字段来自适配器和 JSON 循环
希望您理解我的担忧。 感谢您的帮助。
我想你想在所有输入字段序列中获取文本,如果是这样,在你的 json 你需要为每个输入字段添加 id,每个输入字段都有一个唯一的 id 例如,对于上面的屏幕截图,我想 json 将是
[
"input_field_1": {
"id": "ipf_1",
"hint": "Title",
"other_data": "..."
},
"input_field_2": {
"id": "ipf_2",
"hint": "URL",
"other_data": "..."
},
"input_field_3": {
"id": "ipf_3",
"hint": "Username",
"other_data": "..."
},
" input_field_4 ": {
" id ": " ipf_4 ",
" hint ": " Password ",
" other_data ": "..."
]
所以代码应该像 (kotlin):
val listValue = ArrayList<String>()
val jsonArray = your_json_array
for (i in 1..jsonArray.length()) {
listValue.add(findViewById(getResources().getIdentifier(jsonArray[i].id, "id", context.getPackageName()))?.text?.toString())
}
yourButton.setOnClickListener {
//get value as your requirement
for (value in listValue) {
Log.d("TAG", "value is $value")
}
}
Java代码:
void parseJson() {
String json = "[\n" +
"\"input_field_1\": {\n" +
" \"id\": \"ipf_1\",\n" +
" \"hint\": \"Title\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\"input_field_2\": {\n" +
" \"id\": \"ipf_2\",\n" +
" \"hint\": \"URL\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\"input_field_3\": {\n" +
" \"id\": \"ipf_3\",\n" +
" \"hint\": \"Username\",\n" +
" \"other_data\": \"...\"\n" +
"},\n" +
"\" input_field_4 \": {\n" +
" \" id \": \" ipf_4 \",\n" +
" \" hint \": \" Password \",\n" +
" \" other_data \": \"...\"\n" +
"]";
final ArrayList<String> listValue = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String idName = jsonObject.getString("id");
int id = getResources().getIdentifier(idName, "id", getPackageName());
listValue.add(((EditText) findViewById(id)).getText().toString());
}
findViewById(R.id.yourButtonId).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < listValue.size(); i++) {
Log.d("TAG", "value is: " + listValue.get(i));
}
}
});
} catch (Exception e) {
Log.e("TAG", "error is: " + e.getMessage());
}
}