2017-02-22 22 views
1

ギャラリータイプのアプリで作業しています。私が現時点で問題になっているのは、EditText内に入力されたテキストを取得しようとしていることです。コードはEditTextブロックをレイアウトからTextViewブロックとしてフェッチするので、私が得ているエラーはキャスト例外です。これは、スワイプした後にのみ発生し、2番目のGridLayoutに埋め込まれたLinearLayoutsの一部が削除されます。キャストの問題のためにEditTextを取得しようとすると問題が発生する

LinearLayoutsは、実行時にGridlayout(id product_details)に配置されます。レイアウトの量は、どの画像が押されたかによって計算されます。

  for (int i = 0; i<codes.size(); i++) { 

       //Sets the different elements to te correct texts 
       ViewGroup linearLayout = (ViewGroup) gridLayout.getChildAt(i); 
       TextView textCode = (TextView) linearLayout.getChildAt(0); 
       TextView textPrice = (TextView) linearLayout.getChildAt(1); 
       EditText editTextQ = (EditText) linearLayout.getChildAt(2); 
       EditText editTextC = (EditText) linearLayout.getChildAt(4); 

       commentsAddList.add(editTextC.getText().toString()); 
       quantityAddList.add(editTextQ.getText().toString()); 
       priceAddList.add(textPrice.getText().toString().substring(1)); 
       codeAddList.add(textCode.getText().toString()); 

       productModelAddList.add(new ProductModel()); 
       productModelAddList.get(i).setCode(codeAddList.get(i)); 
       if(!quantityAddList.get(i).equals("")) { 
        productModelAddList.get(i).setQuantity(Integer.parseInt(quantityAddList.get(i))); 
       }else{ 
        productModelAddList.get(i).setQuantity(0); 
       } 
       productModelAddList.get(i).setComment(commentsAddList.get(i)); 
       if(!priceAddList.get(i).equals("")) { 
        productModelAddList.get(i).setPrice(Double.parseDouble(priceAddList.get(i))); 
       }else{ 
        productModelAddList.get(i).setPrice(0); 
       } 
       mRequestPermissions(); 
       adaptToText.addToList(productModelAddList.get(i)); 
      } 

主映像XMLレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/imageLayout" 
    android:columnCount="2" 
    android:verticalSpacing="0dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    android:fitsSystemWindows="true"> 

    <ImageView 
     android:layout_columnSpan="1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView"/> 
    <GridLayout 
     android:id="@+id/product_details" 
     android:columnCount="1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"> 

    </GridLayout> 

</GridLayout> 

グリッドレイアウト内に挿入されるのLinearLayout:

は、コードのこの部分はグリッドレイアウトにimbededれる電流LinearLayoutsをフェッチ

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:layout_columnSpan="1" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:id="@+id/orderSideLayout"> 

    <TextView 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:layout_gravity="fill_horizontal" 
     android:id="@+id/productCode" 
     android:text="" 
     android:padding="10dp"/> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="fill_horizontal" 
     android:id="@+id/productPrice" 
     android:text="" 
     android:padding="10dp" 
     android:paddingLeft="20dp"/> 
    <EditText 
     android:layout_width="match_parent" 
     android:id="@+id/editText1" 
     android:hint="Quantity goes here" 
     android:layout_gravity="fill_horizontal" 
     android:layout_height="wrap_content" 
     android:inputType="number"/> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="fill_horizontal" 
     android:id="@+id/comments" 
     android:text="Comments: " 
     android:padding="10dp" 
     android:paddingLeft="20dp"/> 
    <EditText 
     android:layout_width="match_parent" 
     android:id="@+id/editTextComments" 
     android:hint="Comments here" 
     android:layout_gravity="fill_horizontal" 
     android:layout_height="wrap_content" 
     android:inputType="text"/> 
</LinearLayout> 

キャスティングの例外が発生する場所がわからない、または元の理由がわからないそれが実際に起こった。誰かが助けることができれば、私はそれを多く感謝します!前もって感謝します!

+2

位置4にある場合、 'TextView'を取得しています –

+0

findviewbyId()を使用してEditText参照を取得することもできます。 –

答えて

0

idで取得する代わりに、ビューを取得する方が簡単です。

EditText editTextQ = (EditText) linearLayout.getChildAt(2);  
EditText editTextC = (EditText) linearLayout.getChildAt(4); 

代わりにこれを試してみてください:

EditText editTextQ = (EditText) linearLayout.findViewById(R.id.editText1); 
EditText editTextC = (EditText) linearLayout.findViewById(R.id.editTextComments); 

をXMLを変更した場合、それはビューの位置を変更し、あなたがコードを変更する必要はありませんidでビューを見つけることができるので、これは良くなります。

+0

さて、私はそれを試してみましょう!どのように私はJavaを介してインスタントビューのIDを変更するだろうか? –

+0

setId()を使ってidを変更することはできますが、IDはlinearLayout.findViewByIdを使用するときにidがレイアウトに相対的であるため、必要はありません。あなたは少なくともすべてのレイアウトで同じIDを持つことができ、重要ではないでしょう.IDは同じレイアウトで自分自身を繰り返すことはできません。 –

+0

ありがとう!それは最高です! –

関連する問題