接收由ImageButton引起的类强制转换异常

时间:2012-03-06 17:48:46

标签: android android-widget imagebutton classcastexception

我有这个应用程序正在工作查找并突然崩溃由ClassCastException引起:android.widget.ImageButton。我在工作与否之间做出的唯一改变是从纯色到可绘制(带图案的蓝色)的相对布局的背景。

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="vertical" >

<include
    android:id="@+id/linearLayout1_ref"
    android:layout_width="match_parent"
    android:layout_height="75dip"
    layout="@layout/title_area" />


<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/fur" >

    <View
        android:id="@+id/view5"
        style="@style/BlueBandHor"
        android:layout_width="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <View
        android:id="@+id/view3"
        style="@style/BlueBandVer"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/view5"
        android:layout_centerVertical="true" />

    <View
        android:id="@+id/view4"
        style="@style/BlueBandVer"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/view5"
        android:layout_centerVertical="true" />

    <View
        android:id="@+id/view1"
        style="@style/BlueBandHor"
        android:layout_width="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="48dp" />

    <ImageButton
        android:id="@+id/btn1"
        style="@style/Image"
        android:layout_below="@id/view5"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/portrait"
        android:onClick="onButtonClick"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:src="@drawable/orionhead" 
        android:background="@drawable/button_active" 
        android:clickable="true"/>

    <ImageButton
        android:id="@+id/btn3"
        style="@style/Image"
        android:layout_toRightOf="@+id/view3"
        android:contentDescription="@string/portrait"
        android:onClick="onButtonClick"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:src="@drawable/stonewallhead" 
        android:background="@drawable/button_active" 
        android:clickable="true" 
        android:layout_centerVertical="true"/>

    <Button
        android:id="@+id/how_tobtn"
        style="@style/HowTo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/view1"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dip"
        android:background="@drawable/howto_button_active"
        android:padding="5dip"
        android:text="@string/How_to"
        android:textColor="@color/yellow"
        android:textSize="25dip" 
        android:onClick="onButtonClick"/>

    <ImageButton
        android:id="@+id/btn2"
        style="@style/Image"
        android:layout_toLeftOf="@+id/view4"
        android:contentDescription="@string/portrait"
        android:onClick="onButtonClick"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:src="@drawable/truffelhead" 
        android:background="@drawable/button_active" 
        android:clickable="true" 
        android:layout_centerVertical="true"/>

</RelativeLayout>

java文件:

 public class ImageActivity extends Activity {

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

public void onClick(View view) 
{Intent intent;
    switch (view.getId()) {
    case R.id.how_tobtn:
        intent = new Intent(this, Howbtn.class);
        break;
    case R.id.btn1:
        intent = new Intent(this, Btn1.class);
        break;
    case R.id.btn2:
        intent = new Intent(this, Btn2.class);
        break;
    default:
    intent = new Intent(this, Btn3.class);
    break;
            }   

关于问题是什么的任何想法?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我认为问题在于代码中的某处,您将how_tobtn视为ImageButton,而实际上是Button

<Button
        android:id="@+id/how_tobtn"
        style="@style/HowTo"
        android:layout_width="wrap_content"
...

错误可能在某些方面如下:

(ImageButton)getView(R.id.how_tobtn);

要避免这种情况,请更改xml或将其转换为代码中的正确类型:

(Button)getView(R.id.how_tobtn);

编辑:

我还要重新考虑我的活动的命名。像 Btn,HowtoBtn 这样的名称可能令人困惑,特别是对于您自己而言。