2016-05-31 4 views
-2

私のリストビューには、各行にedittextフィールドがあります。私は "送信"ボタンをクリックすると、私はすべての行を繰り返し、テキストフィールドとテキストフィールドから値を取得しようとします。たとえば、リストビューに5つの行があります。ユーザーは一度に3行しか見ることができません。ユーザーはスクロールして他の行を表示する必要があります。 listviewの下の "Submit"ボタンをクリックすると、すべての行を繰り返して値を取得しようとします。項目が可視でない場合は、常にnullが返されます。 したがって、画面の外にある編集テキストフィールドの値を取得しようとする必要があります。なぜListView.getChildAt(i)は、ボタンクリックイベントでedittextフィールドとtextviewから値を取得するために反復処理中にnullを返します

のListViewレイアウト

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

Clickイベント

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btn_submit: { 
     int count = 0; 

     EditText mTxtEdt1; 
     TextView mTxtTv1; 
     for (int i = 0; i < mListView.getCount(); i++) { 
      v = mListView.getChildAt(i); 
      mTxtTv1 = (TextView) v.findViewById(R.id.txt_pck_tv1); 
      mTxtEdt1;= (EditText) v.findViewById(R.id.txt_pck_edt1); 
      String tvValue = mTxtTv1.getText().toString(); 
     } 
     } 
    } 
} 

V = mListView.getChildAt(I)のボタン。子が見えないときはnullを返します。 それから値を得る方法。 提案はありますか?

+0

あなたのListAdapterでもっとうまくいくはずです。 –

+0

メソッドの引数ビューにビューを保存しています。新しいView変数を作成してみてください。ループの中で、最初に引数をnullにしてから初期化してから、もう一度やり直してください。 – Aradhna

答えて

0

ListViewについての1つのことは、現時点で画面に表示されているものだけを表示することです。したがって、ビューが画面上にあるときにデータを保存または保守し、ボタンをクリックするのではなく変更する必要があります。

たとえば、TextWatcherを使用すると、両方のonTextChangedイベントをリッスンし、リストビューのアダプタの位置に基づいてデータを保存できます。

+0

あなたのアドバイスをありがとうございました。私はListViewアダプタの位置で正しい値のonTextChangeイベントを取得しようとしました。今はすでにうまくいっています。 – NML

+0

あなたは歓迎です:) –

関連する問題