findViewById()问题

时间:2010-11-14 02:21:03

标签: android

我不认为自己是初学者,但我的副本和粘贴让我在自动生成的错误中迷失了方向。这是我的困境,如果我删除下面的评论程序意外崩溃;有评论它显示得很好。

//////// Options.java /////  
public class Options extends Activity {  
/** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.reclayout);  
        //Button STO = (Button)findViewById(R.id.StopBut);  
        //Button REC = (Button)findViewById(R.id.RecButton);  
    }  
}  

///////reclayout.xml/////  
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_height="fill_parent"  
    android:layout_width="fill_parent"  
    android:orientation="vertical"  
    android:gravity="center_vertical">
    <Spinner   
        android:id="@+id/Spinner01"  
        android:layout_height="wrap_content"  
        android:layout_width="fill_parent"  
        android:contentDescription="Classes"/>  
    <EditText  
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:lines="3"   
        android:id="@+id/DescriptionText"   
        android:text="Class Description"/>  
    <LinearLayout  
        android:layout_height="wrap_content"   
        android:id="@+id/ButtonLayout"   
        android:orientation="horizontal"   
        android:layout_width="fill_parent">  
        <ImageButton  
            android:layout_height="wrap_content"   
            android:layout_width="fill_parent"   
            android:layout_weight="3"   
            android:id="@+id/RecButton"   
            android:focusableInTouchMode="true"   
            android:src="@drawable/rec"/>  
        <ImageButton   
            android:layout_height="wrap_content"   
            android:layout_width="fill_parent"   
            android:layout_weight="3"   
            android:id="@+id/PauseButton"   
            android:src="@drawable/pause"/>  
        <ImageButton   
            android:layout_height="wrap_content"   
            android:layout_width="fill_parent"   
            android:layout_weight="3"   
            droid:src="@drawable/stop"   
            android:id="@+id/StopBut"/></LinearLayout></LinearLayout>`  

6 个答案:

答案 0 :(得分:2)

它正在崩溃,因为您正在尝试将ImageButton投射到ButtonImageButton不是Button的子类。在构造函数中,更改为

ImageButton STO = (ImageButton)findViewById(R.id.StopBut);
ImageButton REC = (ImageButton)findViewById(R.id.RecButton);

答案 1 :(得分:0)

有哪些评论?

另请注意@Override不是评论,它是一个命令

这不重要,但记得要清理XML中的起始空格

答案 2 :(得分:0)

public class Options extends Activity {  
   /** Called when the activity is first created. */  
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
    setContentView(R.layout.reclayout);  
     ImageButton STO = (ImageButton)findViewById(R.id.StopBut);  
     ImageButton REC = (ImageButton)findViewById(R.id.RecButton);  
 }  
}  

<强> reclayout.xml

<?xml version="1.0" encoding="utf-8"?>  
   <LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_height="fill_parent"  
 android:layout_width="fill_parent"  
 android:orientation="vertical"  
 android:gravity="center_vertical">
 <Spinner   
    android:id="@+id/Spinner01"  
    android:layout_height="wrap_content"  
    android:layout_width="fill_parent"  
    android:contentDescription="Classes"/>  
 <EditText  
    android:layout_height="wrap_content"   
    android:layout_width="fill_parent"   
    android:lines="3"   
    android:id="@+id/DescriptionText"   
    android:text="Class Description"/>  
 <LinearLayout  
    android:layout_height="wrap_content"   
    android:id="@+id/ButtonLayout"   
    android:orientation="horizontal"   
    android:layout_width="fill_parent">  
    <ImageButton  
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        android:id="@+id/RecButton"   
        android:focusableInTouchMode="true"   
        android:src="@drawable/rec"/>  
    <ImageButton   
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        android:id="@+id/PauseButton"   
        android:src="@drawable/pause"/>  
    <ImageButton   
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        droid:src="@drawable/stop"   
        android:id="@+id/StopBut"/></LinearLayout></LinearLayout>` 

我认为这可以解决你的问题

答案 3 :(得分:0)

您的应用程序崩溃了,因为您正在尝试将ImageButton强制转换为Button,这是错误的,您应该像这样将ImageButton强制转换为ImageButton。

ImageButton STO =(ImageButton)findViewById(R.id.StopBut);
     ImageButton REC =(ImageButton)findViewById(R.id.RecButton);

通过此替换您的代码,您的应用程序不会崩溃。

答案 4 :(得分:0)

你在xml设计中使用了ImageButton但是你试图访问Button类型,这就是它崩溃你的应用程序的原因

答案 5 :(得分:0)

Button STO = (Button)findViewById(R.id.StopBut);  
Button REC = (Button)findViewById(R.id.RecButton);  

//change Button to ImageButton because in xml file defined as ImageButton.

//活动文件

ImageButton STO = (ImageButton)findViewById(R.id.StopBut);  
ImageButton REC = (ImageButton)findViewById(R.id.RecButton);

// OR    //在xml.file中将Imageview更改为Button

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
xmlns:android="http://schemas.android.com/apk/res/android"  
android:layout_height="fill_parent"  
android:layout_width="fill_parent"  
android:orientation="vertical"  
android:gravity="center_vertical">
<Spinner   
    android:id="@+id/Spinner01"  
    android:layout_height="wrap_content"  
    android:layout_width="fill_parent"  
    android:contentDescription="Classes"/>  
<EditText  
    android:layout_height="wrap_content"   
    android:layout_width="fill_parent"   
    android:lines="3"   
    android:id="@+id/DescriptionText"   
    android:text="Class Description"/>  
<LinearLayout  
    android:layout_height="wrap_content"   
    android:id="@+id/ButtonLayout"   
    android:orientation="horizontal"   
    android:layout_width="fill_parent">  
    <Button  
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        android:id="@+id/RecButton"   
        android:focusableInTouchMode="true"   
        android:src="@drawable/rec"/>  
    <ImageButton   
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        android:id="@+id/PauseButton"   
        android:src="@drawable/pause"/>  
    <Button   
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent"   
        android:layout_weight="3"   
        droid:src="@drawable/stop"   
        android:id="@+id/StopBut"/></LinearLayout></LinearLayout>`