Java 从ViewPager中的EditText(其中一些是动态生成的)框中获取值
问题场景: 我有一个视图寻呼机,在其中我将表单分为不同的选项卡。 现在,其中一个选项卡看起来像: 一行的XML为:Java 从ViewPager中的EditText(其中一些是动态生成的)框中获取值,java,android,android-viewpager,textwatcher,Java,Android,Android Viewpager,Textwatcher,问题场景: 我有一个视图寻呼机,在其中我将表单分为不同的选项卡。 现在,其中一个选项卡看起来像: 一行的XML为: <LinearLayout android:id="@+id/email_container" android:layout_width="match_parent" android:layout_height="wrap_content" and
<LinearLayout
android:id="@+id/email_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:tag="lin_email_container">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/rounded_linear"
android:tag="email_sub_container"
android:weightSum="5">
<Spinner
android:id="@+id/email_spinner"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.5" />
<View
android:id="@+id/view3"
android:layout_width="0.3dp"
android:layout_height="match_parent"
android:background="#D3D3D3" />
<EditText
android:id="@+id/edittext_email"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:background="@null"
android:hint="Email"
android:inputType="textEmailAddress"
android:paddingLeft="10dp"
android:textSize="14sp" />
<ImageView
android:id="@+id/btn_emailadd"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:layout_weight=".5"
android:src="@drawable/ic_action_add_to_queue" />
</LinearLayout>
</LinearLayout>
因此,在没有任何固定Id和任何solig标记的情况下,我如何实现textwatchers,这也是一个动态内容
对于这个问题,我能找到的最简单的解决方案是使用父遍历机制,但是这在视图寻呼机中不起作用,因为我无法在任何事件上运行此代码:
public void traverseLinearLayout(LinearLayout layout) {
for (int i = 0; i < layout.getChildCount(); i++) {
View v = layout.getChildAt(i);
if (v instanceof LinearLayout) {
traverseLinearLayout((LinearLayout) v);
}
if (v instanceof EditText) {
System.out.println(v.getTag());
//Get Edit Text value here
}
if (v instanceof Spinner) {
}
}
}
public void TraverseLineLearlayout(线性布局){
对于(int i=0;i
我看到您在父布局上有标记:
android:id=“@+id/email\u容器”
这解决了你一半的问题。现在创建一个实现TextWatcher的泛型类:
public class GenericTextWatcher implements TextWatcher {
public View view;
public GenericTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//do nothing
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
//do nothing
}
public void afterTextChanged(Editable s) {
System.out.println(view.getTag());
}
}
动态创建视图时,只需知道EditText
是否用于电子邮件或任何其他表单字段,如:web、phone、messenger等。您可以使用.contains
或等方法
这有点令人讨厌,但现在您可以轻松地执行以下操作:
edt_dynamic.setTag(container.getTag() + "edt_text" + new Date());
edt_dynamic.addTextChangedListener(new GenericTextWatcher(edt_dynamic));
小心用纳秒精度的东西替换newdate()
在Textwatcher中,您可以根据场景向映射添加键值对。当按下用于删除EditText
的X
时,确保删除键、值(从地图上)
edt_dynamic.setTag(container.getTag() + "edt_text" + new Date());
edt_dynamic.addTextChangedListener(new GenericTextWatcher(edt_dynamic));