java - 无法将图像按钮转换到小部件按钮

标签 java android eclipse

我从类似的堆栈溢出中尝试了以下内容 清理,构建项目 重新启动 Eclipse

我还尝试更新所有内容:从 SDK 和 Eclipse 插件 重启模拟器等

日志猫输出:

09-26 22:11:49.182: E/AndroidRuntime(1393): FATAL EXCEPTION: main
09-26 22:11:49.182: E/AndroidRuntime(1393): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ass2/com.example.ass2.MP3Player}: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Button
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.os.Looper.loop(Looper.java:137)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread.main(ActivityThread.java:5041)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at java.lang.reflect.Method.invokeNative(Native Method)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at java.lang.reflect.Method.invoke(Method.java:511)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at dalvik.system.NativeStart.main(Native Method)
09-26 22:11:49.182: E/AndroidRuntime(1393): Caused by: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Button
09-26 22:11:49.182: E/AndroidRuntime(1393):     at com.example.ass2.MP3Player.onCreate(MP3Player.java:30)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.Activity.performCreate(Activity.java:5104)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-26 22:11:49.182: E/AndroidRuntime(1393):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-26 22:11:49.182: E/AndroidRuntime(1393):     ... 11 more

代码

public class MP3Player extends Activity{

    Button prev , play , stop , next , choosefiles;
    ArrayAdapter<Song> adaptor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.mp3player);


    //Bitmap         mDummyAlbumArt = BitmapFactory.decodeResource(getResources(), R.drawable.dummy_album_art);


     prev =(Button)findViewById(R.id.prev);
     play =(Button)findViewById(R.id.play);
     stop =(Button)findViewById(R.id.stop);
     next =(Button)findViewById(R.id.next);
     prev.setOnClickListener(new OnPress());
     play.setOnClickListener(new OnPress());
     stop.setOnClickListener(new OnPress());
     next.setOnClickListener(new OnPress());

    List<Song> playlist = new ArrayList<Song>();

    System.out.println("Before adapter on creat");

    Song test= new Song("sakis","rouvas","name","path");
    playlist.add(test);

    ListView list = (ListView) findViewById(R.id.listview);
    adaptor = new ArrayAdapter<Song>(this,
            R.layout.list_row, playlist);
    list.setAdapter(adaptor);
    registerForContextMenu(list);

    System.out.println("after adapter on craet");
}     `

最佳答案

ImageButton 不是 Button 的子级,无论其名称如何。看 http://developer.android.com/reference/android/widget/ImageButton.html 它扩展了 ImageView,而不是 Button。 其中一行

 prev =(Button)findViewById(R.id.prev);
 play =(Button)findViewById(R.id.play);
 stop =(Button)findViewById(R.id.stop);
 next =(Button)findViewById(R.id.next);

导致此错误,因为 View 是 ImageButton,而不是 Button。事实上,由于您只将 OnClickListeners 分配给 View ,因此似乎没有必要强制转换它们。 “查看”即可。当然,这取决于您的其余代码,但如果您不使用子方法,通常不应强制转换为 subview 。尤其是在 Button 和 ImageButton 之间切换时,这可能会很痛苦。

关于java - 无法将图像按钮转换到小部件按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039727/

相关文章:

java : convert List of Bytes to array of bytes

java - 在 jOOQ 中注册全局转换器

没有 requestLocationUpdates 不会触发 Android 地理围栏

java - Android GPS 尖峰问题

当未从 Eclipse 安装 apk 时,Android map 无法工作

java - 线程中的异常 "main"java.lang.IllegalArgumentException : setSelectedIndex: 4 out of bounds

java - 如何使 JFrame 按钮在 Netbeans 中打开另一个 JFrame 类?

java - 如何在java中使用不同的输出记录器文件?

android - ffmpeg水印

android - 未调用禁用的编辑文本的 onClickListener