为什么ListView.getChildAt(i)在迭代时返回null以从按钮单击事件中的edittext字段和textview中检索值

时间:2016-05-31 04:23:19

标签: android listview

在我的listview中,每行都有edittext字段。当我点击"提交"按钮,我迭代所有行,并尝试从文本字段中获取值并编辑文本字段。例如,列表视图中有五行。用户一次只能看到三行。用户需要滚动才能看到其他行。 当我点击"提交"列表视图下方的按钮,我迭代所有行并尝试获取值。如果项目不可见,则它始终返回null。 因此,我应该如何尝试获取屏幕外的编辑文本字段的值。

ListView布局     

$producers = strval($_POST['producers']);
$company = strval($_POST['company']);
$title = strval($_POST['title']);

列表视图项目布局

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="32dip"
        android:orientation="horizontal" >

            <TextView
                android:id="@+id/txt_tv1"
                android:layout_width="140dip"
                android:layout_height="wrap_content"
                android:gravity="left"
                android:layout_gravity="center_vertical"
                android:text="@string/tv1" 
                android:textStyle="bold"/>

            <View
                android:layout_width="1dip"
                android:layout_height="match_parent"
                android:background="@color/white" />

            <TextView
                android:id="@+id/txt_tv2"
                android:layout_width="70dip"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:layout_gravity="center_vertical"
                android:text="@string/tv2" 
                android:textStyle="bold"
                android:ellipsize="none"
                android:scrollHorizontally="false"/>

            <View
                android:layout_width="1dip"
                android:layout_height="match_parent"
                android:background="@color/white" />

            <TextView
                android:id="@+id/txt_tv3"
                android:layout_width="70dip"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:layout_gravity="center_vertical"
                android:text="@string/tv3" 
                android:textStyle="bold"
                android:ellipsize="none"
                android:scrollHorizontally="false"/>
    </LinearLayout> 

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
         android:layout_marginTop="@dimen/padding"
        android:layout_weight="1">
    </ListView> 

    <Button
        android:id="@+id/btn_submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/submit"/>
</LinearLayout>

按钮单击事件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear_item"
    android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >
    <TextView
        android:id="@+id/txt_pck_tv1"
        android:layout_width="140dip"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="AAAA" 
        android:textStyle="bold"/>
    <View
        android:layout_width="1dip"
        android:layout_height="match_parent"
        android:background="@color/white" />
    <TextView
        android:id="@+id/txt_pck_tv2"
        android:layout_width="70dip"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textStyle="bold"
        android:textColor="@color/red"
        android:text="BBB" /> 
    <View
        android:layout_width="1dip"
        android:layout_height="match_parent"
        android:background="@color/white" />  
    <EditText
        android:id="@+id/txt_pck_edt1"
        android:layout_width="70dip"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:ems="10"
        android:gravity="right|center_vertical"
        android:inputType="number"
        android:textColor="@color/green"
        android:textStyle="bold" /> 
</LinearLayout>

v = mListView.getChildAt(i);当孩子不在视野时返回null。 那么如何从中获取价值。 任何建议???

1 个答案:

答案 0 :(得分:0)

这是关于ListView的一件事,它只为您提供当前屏幕上显示的视图。因此,当您的视图在屏幕上并更改时,您必须保存或维护数据,而不是单击按钮进行查看。

例如,你可以使用TextWatcher监听两者的onTextChanged事件,并在listview适配器位置的基础上保存数据。

相关问题