2013-05-10 15 views
5

Sto provando ad aggiungere un'immagine alla mia app ma continua a bloccarsi e non riesco a capire perché.L'app si arresta in modo anomalo quando si aggiunge un ImageView

Ho più immagini nella mia app, ma aggiungere questa immagine sembra essere problematico. Ecco il mio xml (EDIT: completo XML (Questo è cambiato da quando l'originale a scopo di impaginazione)):

<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> 

E il mio codice Java (condensato per brevità):

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) 

Qualcuno può capire qual è il problema? Grazie in anticipo.

+0

Potete fornire l'output logcat per favore? –

+0

Qual è la traccia dello stack per l'arresto anomalo? – kabuko

+0

fornire completo xml – Gustek

risposta

3

Quando crating ids in file xml (utilizzando @ + id /) lo si fa solo sulla prima occorrenza e poi si utilizza solo @ id/

Così tuo xml dovrebbe apparire come questo

<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

Sì, questo funziona. Buon posto! – Ciaran

4

Queste due linee sguardo problematico per me:

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

Non ritiene la "@ +/id" forma generare un nuovo valore di id? Forse volevi dire "@ id /"

+1

Questo è giusto. Se appare una vista dopo imageView1, dovremmo usare "@ + id", non "@id". Se una vista appare prima di imageView1, possiamo usare "@id", ma immagino che il problema è che non possiamo trovare queste viste. – buptcoder

+0

Ahhh, potresti avere ragione. Ho usato RelativeLayout raramente; mai risolto il problema con riferimento a una vista che non è stata ancora definita. Questo è probabilmente come è fatto. Tutti quelli che mi hanno votato: cancella il tuo voto. –

0

causato da: java.lang.ClassCastException: android.widget.Button non può essere lanciato a android.widget.ImageView

Lei sembra avere un Button in il layout con lo stesso ID come ImageView

+0

Io no. My ImageView è 'imageView1' mentre i miei pulsanti hanno il formato 'imageTextButton [x]' – Ciaran

0

Ho appena scoperto cosa è andato storto quando ho aggiunto un'immagine. Il problema è, nel mio caso, che ScrollView non può avere più di un figlio diretto. Quindi, quando ho aggiunto un'immagine affiancata al bambino esistente, la compilazione non mostra errori, ma l'applicazione runtime si blocca durante la creazione. La soluzione era quella di aggiungere un layout all'interno della scrollview come un unico figlio diretto, all'interno del quale andranno i miei utili layout e viste del contenuto della vista a scorrimento.

Problemi correlati