Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ViewPager中的EditText(其中一些是动态生成的)框中获取值_Java_Android_Android Viewpager_Textwatcher - Fatal编程技术网

Java 从ViewPager中的EditText(其中一些是动态生成的)框中获取值

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

问题场景:

我有一个视图寻呼机,在其中我将表单分为不同的选项卡。 现在,其中一个选项卡看起来像:

一行的XML为:

<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));