2013-05-10 27 views
5

Tôi đang cố gắng thêm hình ảnh vào ứng dụng của mình nhưng nó vẫn bị lỗi và tôi không thể kết luận tại sao.Lỗi ứng dụng khi thêm một ImageView

Tôi có nhiều hình ảnh trong ứng dụng của mình, nhưng việc thêm hình ảnh này dường như có vấn đề. Dưới đây là xml của tôi (EDIT: xml đầy đủ (Điều này đã thay đổi kể từ bản gốc cho các mục đích bố trí)):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" > 

<Button 
    android:id="@+id/imageTextButton4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/imageTextButton3" 
    android:layout_alignBottom="@+id/imageTextButton3" 
    android:layout_alignLeft="@+id/imageTextButton2" 
    android:layout_alignRight="@+id/imageTextButton2" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Progress" /> 

<Button 
    android:id="@+id/imageTextButton3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/imageTextButton1" 
    android:layout_alignRight="@+id/imageTextButton1" 
    android:layout_below="@+id/imageTextButton1" 
    android:layout_marginTop="85dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Meal Plans" /> 

<Button 
    android:id="@+id/imageTextButton2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginRight="22dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Your Meals" /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="42dp" 
    android:src="@drawable/logo" /> 

<Button 
    android:id="@+id/imageTextButton1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="16dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Meal of the Day" /> 

</RelativeLayout> 

Và mã java của tôi (ngưng tụ cho ngắn gọn):

package com.example.c3347115app; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.content.Intent; 

public class MainActivity extends Activity { 

ImageView image; 

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

    image = (ImageView) findViewById(R.id.imageView1); 

Logcat:

05-10 01:55:30.718: W/dalvikvm(13140): threadid=1: thread exiting with uncaught exception (group=0x40a99228) 
05-10 01:55:30.728: E/AndroidRuntime(13140): FATAL EXCEPTION: main 
05-10 01:55:30.728: E/AndroidRuntime(13140): java.lang.RuntimeException: Unable to  start activity ComponentInfo{com.example.c3347115app/com.example.c3347115app.MainActivity}: java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.ImageView 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2240) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.ActivityThread.access$600(ActivityThread.java:139) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.os.Looper.loop(Looper.java:156) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.ActivityThread.main(ActivityThread.java:4987) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at java.lang.reflect.Method.invoke(Method.java:511) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at dalvik.system.NativeStart.main(Native Method) 
05-10 01:55:30.728: E/AndroidRuntime(13140): Caused by: java.lang.ClassCastException:  android.widget.Button cannot be cast to android.widget.ImageView 
05-10 01:55:30.728: E/AndroidRuntime(13140): at com.example.c3347115app.MainActivity.onCreate(MainActivity.java:22) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.Activity.performCreate(Activity.java:4538) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071) 
05-10 01:55:30.728: E/AndroidRuntime(13140): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2161) 

Có ai có thể tìm ra vấn đề là gì không? Cảm ơn trước.

+0

Bạn có thể cung cấp đầu ra logcat không? –

+0

Dấu vết ngăn xếp cho sự cố là gì? – kabuko

+0

cung cấp đầy đủ xml – Gustek

Trả lời

3

Khi đóng thùng id trong file xml (sử dụng @ + id /) bạn làm điều đó chỉ về sự xuất hiện đầu tiên và sau đó bạn chỉ cần sử dụng @ id/

vì vậy, xml bạn nên xem xét như thế này

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" > 

<Button 
    android:id="@+id/imageTextButton4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/imageTextButton3" 
    android:layout_alignBottom="@id/imageTextButton3" 
    android:layout_alignLeft="@+id/imageTextButton2" 
    android:layout_alignRight="@id/imageTextButton2" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Progress" /> 

<Button 
    android:id="@id/imageTextButton3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/imageTextButton1" 
    android:layout_alignRight="@id/imageTextButton1" 
    android:layout_below="@id/imageTextButton1" 
    android:layout_marginTop="85dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Meal Plans" /> 

<Button 
    android:id="@id/imageTextButton2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:layout_marginRight="22dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Your Meals" /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="42dp" 
    android:src="@drawable/logo" /> 

<Button 
    android:id="@id/imageTextButton1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="16dp" 
    android:drawableTop="@drawable/ic_launcher" 
    android:text="Meal of the Day" /> 

</RelativeLayout> 
+1

Có tác dụng này. Điểm tốt! – Ciaran

4

Hai dòng này trông có vấn đề với tôi:

android:layout_above="@+id/imageTextButton1" 
android:layout_alignRight="@+id/imageTextButton2" 

Chẳng phải "@ + id /" hình thức tạo ra một giá trị id mới? Có lẽ bạn có nghĩa là "@ id /"

+1

Điều này đúng. Nếu chế độ xem xuất hiện sau imageView1, chúng tôi sẽ sử dụng "@ + id" chứ không phải "@id". Nếu chế độ xem xuất hiện trước imageView1, chúng tôi có thể sử dụng "@id" Nhưng tôi đoán vấn đề là chúng tôi không thể tìm thấy các chế độ xem này. – buptcoder

+0

Ahhh, bạn có thể đúng. Hiếm khi sử dụng RelativeLayout bản thân mình; không bao giờ gặp vấn đề với việc tham chiếu một Chế độ xem chưa được xác định. Đây có lẽ là cách nó được thực hiện. Mọi người đã bỏ phiếu cho tôi: hủy phiếu bầu của bạn. –

0

Nguyên nhân: java.lang.ClassCastException: android.widget.Button không thể được đúc để android.widget.ImageView

Bạn dường như có một Button trong bố trí của bạn với cùng một ID như bạn ImageView

+0

Tôi thì không. My ImageView là 'imageView1' trong khi các nút của tôi có định dạng 'imageTextButton [x]' – Ciaran

0

Tôi vừa phát hiện ra điều gì đã xảy ra khi tôi thêm hình ảnh. Vấn đề là, trong trường hợp của tôi, ScrollView không thể có nhiều hơn một con trực tiếp. Vì vậy, khi tôi thêm một hình ảnh bên cạnh con hiện có, biên dịch cho thấy không có lỗi nhưng ứng dụng thời gian chạy bị treo khi tạo. Giải pháp là để thêm một bố trí bên trong scrollview như là một đứa trẻ trực tiếp duy nhất, bên trong đó sẽ đi bố cục nội dung cuộn và chế độ xem hữu ích của tôi.

Các vấn đề liên quan