Java 由于铸造问题,尝试获取EditText时出现问题

Java 由于铸造问题,尝试获取EditText时出现问题,java,android,xml,android-layout,android-studio,Java,Android,Xml,Android Layout,Android Studio,我正在开发一个画廊类型的应用程序。我目前遇到的问题是试图在EditText中获取键入的文本。我得到的错误是一个强制转换异常,因为代码从布局中获取EditText块作为TextView块。这仅在我滑动后发生,这会导致第二个GridLayout中嵌入的一些LinearLayout被删除 LinearLayout在运行时放入Gridlayout(带有id product_详细信息),版面数量根据按下的图片计算 这部分代码获取嵌入到GridLayout中的当前LinearLayout:

我正在开发一个画廊类型的应用程序。我目前遇到的问题是试图在EditText中获取键入的文本。我得到的错误是一个强制转换异常,因为代码从布局中获取EditText块作为TextView块。这仅在我滑动后发生,这会导致第二个GridLayout中嵌入的一些LinearLayout被删除

LinearLayout在运行时放入Gridlayout(带有id product_详细信息),版面数量根据按下的图片计算

这部分代码获取嵌入到GridLayout中的当前LinearLayout:

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

for(inti=0;i而不是通过位置获取视图,通过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查找视图,而不需要更改代码。

而不是按位置获取视图,按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查找视图,您不需要更改代码。

可能位于位置4,您将获得
TextView
您可以使用findviewbyId()获得EditText引用太多了。可能在位置4,你得到的是
TextView
你也可以使用findviewbyId()获得EditText引用。好的,我试试看!我如何通过Java更改实例视图的id?我可以使用setId()更改id,但你不应该需要,因为Id与你操作的布局有关,当你使用
linearLayout时。findViewById
你在向android询问linearLayout内部具有特定Id的视图,你至少可以在所有布局中拥有相同的Id,这无关紧要,Id只是不能在同一布局中重复它本身。好的,我试试看那!我如何通过Java更改实例视图的id?我可以使用setId()更改id,但您不应该需要,因为当您使用
linearLayout时,Id与您操作的布局相关。findViewById
您向android请求具有特定Id的视图,该视图位于linearLayout内部,您至少可以在所有布局中具有相同的Id,这无关紧要,Id只是不能在同一布局中重复它本身。