2011-08-26 2 views
4

J'essayais de faire une application avec une vue personnalisée, et j'ai continué à obtenir "erreur gonfler classe". Il doit être que je manque certaines des bases quand il s'agit de vues personnalisées, mais je ne suis pas sûr de quoi. Voici un programme très simple avec une vue personnalisée, que faut-il de plus pour le faire fonctionner?SurfaceView et la classe de gonflement d'erreur

(Notes: Pour résoudre cette question, j'ai placé la classe SurfaceView dans la classe d'activité, ce qui n'était pas le cas dans la plus grande application.) Je ne montre pas le fichier AndroidManifest.xml ici, mais c'est juste ce que a été généré par l'assistant dans Eclipse)

Voici la java.

package com.mypackage; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.SurfaceView; 

public class SimpleCustomViewActivity extends Activity { 

class TheView extends SurfaceView{ 

    private static final String TAG = "TheView"; 

    public TheView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     Log.i(TAG,"TheView(" + context + "," + attrs + ")"); 
    } 

} 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.simple_layout); 
     TheView v = (TheView) findViewById(R.id.myview); 
    } 
} 

Voici res fichier/mise en page/simple_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <com.mypackage.SimpleCustomView.TheView 
    android:id="@+id/myview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
     /> 
</LinearLayout> 

Répondre

2

en XML, il shou ld être:

<com.mypackage.SimpleCustomView.TheView  
    android:id="@+id/myview"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"> 
</com.mypackage.SimpleCustomView.TheView> 
+0

j'ai changé l'application simple vue de refléter votre suggestion. Il s'est toujours écrasé. Il existe une longue trace de pile qui semble initialement être déclenchée par une exception ClassNotFoundException sur com.mypackage.SimpleCustomViewActivity.TheView. J'ai donc essayé de rendre le cours public aussi, mais il se bloque. – JimC

+0

En outre, je remarque que nous avons tous deux écrit com.mypackage.SimpleCustomView quand nous entendons com.mypackage.SimpleCustomViewActivity. Mais cette erreur particulière semble ne jamais avoir été dans le code source que j'ai testé et doit avoir été introduit lorsque je l'ai copié sur ce formulaire web. – JimC

+3

Ok. Je l'ai eu pour travailler. J'ai dû déplacer TheView vers un autre fichier plutôt que de l'avoir comme sous-classe. Merci beaucoup pour l'aide. Les choses les plus simples peuvent parfois déranger le cerveau d'un développeur pendant des heures. Je souhaite que les erreurs ci-dessus ont été interceptées au moment de la compilation. – JimC

0

Je crois que quelque chose comme cela peut fonctionner si je ne l'ai pas testé:

<View 
    class="com.mypackage.SimpleCustomView$TheView" 
    id="@+id/myview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
5

Lorsque u appeler votre propre classe surfaceView à partir du fichier xml u besoin d'ajouter le public suivant méthodes créant surfaceView:

public GameView(Context context) { 
    super(context); 
    init(context); 
} 

public GameView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context); 
} 

public GameView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(context); 
} 

Si u utilisez la fonction setContentView (gv) vous avez seulement besoin de la première.

0
: declare two methods and it should be public!! 

publique TheView (contexte de contexte)

publique TheView (contexte de contexte, AttributeSet attrs)

Questions connexes