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