2010-12-19 9 views
15

Estoy tratando de inflar una vista de clase interna y obtener el problema de "clase de inflado de error". Me he referido al this post que fue útil, pero todavía estoy perdido sobre por qué no puedo hacer que esto funcione.Error al inflar la vista de clase interna

Aquí hay un fragmento de código, mi XML y logcat.

Editar: También he notado que los estados LogCat un "no como excepción método" para "CupcakeMessageView (Contexto, AttributeSet) cuando claramente tienen que

Gracias a todos

public class CupcakeMessage extends Activity { 

    class CupcakeMessageView extends View { 
     private static final int TEXT_SIZE = 12; 
     private static final int X_OFFSET = 15; 

     private Paint mPaint; 

     public CupcakeMessageView(Context context) { 
      super(context); 
     } 

     public CupcakeMessageView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      mContext = context; 
      ... 
     } 

     more class stuff... 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.cupcake_message); 

     ...  
    } 
} 

Aquí es el.! XML

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

    <view class="com.cmllc.zcc.CupcakeMessage$CupcakeMessageView" 
     android:id="@+id/cupcake_message_view" 
     android:screenOrientation="portrait" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    more views... 

Logcat:

12-19 09:31:24.249: ERROR/AndroidRuntime(5435): FATAL EXCEPTION: main 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cmllc.zcc/com.cmllc.zcc.CupcakeMessage}: android.view.InflateException: Binary XML file line #7: Error inflating class com.cmllc.zcc.CupcakeMessage$CupcakeMessageView 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.os.Looper.loop(Looper.java:123) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at dalvik.system.NativeStart.main(Native Method) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.cmllc.zcc.CupcakeMessage$CupcakeMessageView 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.createView(LayoutInflater.java:503) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.Activity.setContentView(Activity.java:1647) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at com.cmllc.zcc.CupcakeMessage.onCreate(CupcakeMessage.java:119) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  ... 11 more 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435): Caused by: java.lang.NoSuchMethodException: CupcakeMessageView(Context,AttributeSet) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at java.lang.Class.getMatchingConstructor(Class.java:660) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at java.lang.Class.getConstructor(Class.java:477) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  at android.view.LayoutInflater.createView(LayoutInflater.java:475) 
12-19 09:31:24.249: ERROR/AndroidRuntime(5435):  ... 21 more 
+2

Intente hacer que su clase interna 'public static' – Macarse

+0

+1. Eso funciono. Cuidado para explicar por qué? – user432209

+0

Déjame colocar una respuesta. – Macarse

Respuesta

22

Necesita agregar public static a la clase interna.

  • public porque debe ser visible desde el exterior.
  • static porque si no necesitara tener CupcakeMessage para crear una instancia.

De todos modos recomendaría hacer el View en una clase separada.

+0

Puse originalmente la vista en una clase separada. Decidí ponerlo como en la clase interna porque la vista es básicamente toda la actividad menos un par de botones. Para mí, esta implementación es más simple y más fácil de entender. Gracias por tu ayuda. – user432209

Cuestiones relacionadas