0

ich erfolgreich benutzerdefinierte Ansichten in der Vergangenheit erstrecken oder Linearlayout android.support.v7.widget.CardView erstellt habe, aber ich kann nicht scheinen, um es zu arbeiten, wenn von android.support erstreckt. v7.widget.AppCompatSpinner. Ich sehe nicht, warum es ein Problem für diese spezielle Klasse ist, also muss ich etwas übersehen.android.view.InflateException beim Ausfahren AppCompatSpinner

Ich habe die folgende Klasse CustomSpinner

public class CustomSpinner extends android.support.v7.widget.AppCompatSpinner { 

    public CustomSpinner(Context context) 
    { 
     this(context, null); 
    } 

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

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

    private void init(Context context, AttributeSet attrs, int defStyle) 
    { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     inflater.inflate(R.layout.view_custom_spinner, this); 
    } 
} 

Und die R.layout.view_custom_spinner

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.AppCompatSpinner 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/view_custom_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="@dimen/minimum_clickable_area" 
    android:gravity="center_vertical"/> 

Und ich verwende die benutzerdefinierte Komponente in ein anderes Layout für 'MyFragment' wie diese (Linie 11 im stacktrace erwähnt):

<my.custom.namespace.CustomSpinner 
    android:id="@+id/view_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

Das merkwürdige ist, dass, wenn ich verlängern th e CustomSpinner Klasse von Linearlayout alles funktioniert gut und ich habe nicht einen InflateException.

bekomme ich folgende Stacktrace:

java.lang.RuntimeException: Unable to start activity ComponentInfo{my.custom.namespace.MyActivity}: android.view.InflateException: Binary XML file line #8: Binary XML file line #11: Error inflating class my.custom.namespace.CustomSpinner 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3320) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416) 
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:7407) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                     Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file line #11: my.custom.namespace.CustomSpinner 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:551) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183) 
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819) 
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) 
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590) 
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377) 
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332) 
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239) 
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231) 
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181) 
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192) 
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572) 
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177) 
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258) 
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266) 
                     at android.app.Activity.performStart(Activity.java:6943) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class my.custom.namespace.CustomSpinner 
                     at android.view.LayoutInflater.createView(LayoutInflater.java:657) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:843) 
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183)  
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)  
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)  
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)  
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)  
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)  
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)  
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)  
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)  
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)  
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)  
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258)  
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266)  
                     at android.app.Activity.performStart(Activity.java:6943)  
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)  
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: java.lang.reflect.InvocationTargetException 
                     at java.lang.reflect.Constructor.newInstance(Native Method) 
                     at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)  
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)  
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)  
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)  
                     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001)  
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:843)  
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:527)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183)  
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)  
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)  
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)  
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)  
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)  
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)  
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)  
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)  
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)  
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)  
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258)  
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266)  
                     at android.app.Activity.performStart(Activity.java:6943)  
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)  
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: android.view.InflateException: Binary XML file l 
+0

'Ich habe erfolgreich erstellt benutzerdefinierte Ansichten in der Vergangenheit erstreckt Linearlayout oder android.support.v7.widget.CardView' Hmmm Das klingt seltsam. Kannst du den Stacktrace veröffentlichen? – azizbekian

Antwort

1

ich nicht, warum Sie das Layout des Spinners aufblasen. Der Spinner hat sein eigenes Layout, Sie müssen das XML nicht mit einem Spinner erstellen. Für ein lineares Layout ist es sinnvoll, das eigene Layout aufzublasen, da es sich um eine ViewGroup handelt. Innerhalb Ihrer benutzerdefinierten Ansichtsklasse können Sie die untergeordneten Elemente des linearen Layouts binden, für das Drehfeld jedoch einfach die Elemente des Drehfeldlayouts verwenden und das Layout mithilfe der benutzerdefinierten Ansichtsattribute bearbeiten . Zusammenfassend kann man keine Kinder zu einem Spinner Layout hinzuzufügen, es macht so keinen Sinn eine benutzerdefinierte XML für sie aufzublasen. Einfach LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.view_custom_spinner, this); aus dem Code entfernen und Sie erhalten eine perfekt Arbeiterklasse zur Verlängerung der Spinner haben.

+1

Ich sehe jetzt, ich muss nur minHeight und Schwerkraft programmgesteuert hinzufügen. Ich werde auch meine Lösung für die benutzerdefinierte CardView erneut besuchen müssen, da ich wahrscheinlich eine CardView zu einem anderen CardView hinzufügen werde. – Wirling

+0

Ja, wahrscheinlich sollten Sie den gleichen Ansatz mit einem CardView verwenden –

Verwandte Themen