Spinner auf Popup funktioniert nicht

  • Hey folks, ich habe große Probleme mit meinem Spinner.
    [Blockierte Grafik: http://preview.slick.pics/FUnaKXCKJ.png]


    Mein Popup wird angezeigt, aber sobald ich den Spinner öffnen will crasht meine App mit folgendem Fehler...


    Ich vermute das ich dem Spinner einen falschen Context beim initialisieren gegeben habe, und zwar habe ich folgendes übergeben...

    Code
    Variables.mainActivity = MainActivity.this;
    .
    .
    .  
    
    
      Activity mContext = Variables.mainActivity;
      Spinner ecb = new Spinner(mContext);

    ist es möglich das ich dem Spinner irgendeine View o.ä. vom Popup bzw. PopupWindow geben muss?

  • Hier noch etwas zusätzliche Info...
    para_popup.xml



    jede Row meiner Tabelle bekommt diesen onLoongClickListener...


    in Zeile 22 wird ein ParaEdit erstellt, das ist eine Klasse die das GridLayout der para_popup.xml füllt...
    Hier nun die wichtigsten Ausschnitte aus der ParaEdit Klasse...


    Bei den "/////////////////" hab ich unwichtigen Code ausgelassen, da meine ParaEdit 595 Zeilen hat.

  • Ist denn der Kontext derjenige, der in dieser Ansicht auch wirklich gezeigt wird?
    Die Fehlermeldung lässt darauf schließen, dass Du einfach irgendeinen Kontext übergibst, damit sich der Spinner initialisieren lässt.
    Da das PopUp sich direkt an das View hängt müsstest Du vermutlich dessen Kontext an den Spinner übergeben.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • ja also Variables.mainActivity sieht für mich sehr krude aus. Du solltest so wenig statische methoden wie möglich verwenden.


    Und wie marko schon sagte, du müsstest den context der view verwenden (sollte in der regel die activitiy sein wo diese view gesetzt wird)

  • die MainActivity tauscht in meinem Fall über FragmentManager -> FragmentTransaction -> replace() die Fragmente aus, die aktuell angezeigt werden. Es ist also immer so das der gezeigt Context, der von meiner MainActivity ist !? Ausser ich hab da was falsch verstanden.


    Auf meinem aktuell angezeigten Fragment (ParaMain) liegt ein MapPagerAdapter, dieser zeigt wiederum Fragmente an (ParaFragment), auf diesen Fragmenten liegt ein TableLayout, jede Row bekommt einen onLongKlickListener.
    Ab hier sind wir dann wieder an der oben geschilderten Stelle, durch den LongClick wird ein popupView erstellt, para_popup.xml als Layout definiert, dessen GridLayout wird durch die Klasse ParaEdit gefüllt.


    Dieses GridLayout wird dynamisch erstellt, je nachdem welcher Art mein Parameter ist, es werden also mal nur TextViews und EditText´s angezeigt, mal TextViews mit einer Gruppe RadioButtons, und eben mal TextViews mit einem Spinner.
    In allen Fällen wird immer der selbe Context übergeben, nämlich "mContext", und es funktioniert auch alles, bis auf das aufklappen dieses doofen Spinners.

  • In dem Spinner scheinst Du ein PopUp Listview anzuzeigen. (Ich glaube, das ist die Standardfunktionalität des Spinner beim Anklicken.)
    Allerdings befindest Du Dich bereits in einem PopUp View.


    Gemäß StackOverflow darf das Parent eines PopUp kein PopUp sein.
    Du solltest also zunächst vergleichen, ob der Parent Deines Spinners dieselbe Instanz ist wie Dein PopUp View.
    Und falls dem so ist das irgendwie ändern. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • wie vergleich man so was? Mit equals oder == oder instanceOf ???


    Wenn ich den Debugger anhalte und die Eigenschaften meines Spinners anschaue steht bei mParent GridLayout, dessen mParent ist LinearLayout, und dessen mParent ist android.view.ViewRootImpl

  • Und beim PopUp View?


    Ich vermute, der Ansatz mit den zwei PopUp Views ist hier der Urheber der Probleme.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Zur Laufzeit zeigt es mir NULL an, darum hab ich es mal mit einem System.out.println() versucht...


    Ausgabe:

    Code
    04-15 15:12:50.913    4456-4456/com.example.paul_io I/System.out﹕ android.view.ViewRootImpl@530a90dc
    04-15 15:12:50.913    4456-4456/com.example.paul_io I/System.out﹕ android.widget.LinearLayout{530a86ac V.E..... ......I. 0,0-0,0 #7f0a0073 app:id/llMain}
  • Beide müssen denselben Parent haben.
    Es nützt also nix beim ersten Lauf nach dem Einen und beim zweiten Lauf nach dem Andern zu sehen.


    Du musst beides bei einem Durchlauf betrachten.
    Und dann nicht nur auf die Klasse schauen (android.view.ViewRootImpl) sondern auf die Instanz (@530a90dc)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Zeile 27 + 28



    Zeile 7 + 8


    Ausgabe:

    Code
    System.out﹕ ParaEdit init Spinner:     ###########  android.view.ViewRootImpl@5312a4e0
    System.out﹕ ParaEdit init popupWindow: ###########  android.view.ViewRootImpl@5312a4e0
    System.out﹕ ParaEdit init Spinner:     ###########  android.view.ViewRootImpl@5312a4e0
    System.out﹕ ParaEdit init popupWindow: ###########  android.view.ViewRootImpl@5312a4e0
    System.out﹕ onLongClick popupView:     ###########  android.view.ViewRootImpl@5312a4e0
    System.out﹕ onLongClick popupWindow:   ###########  android.view.ViewRootImpl@5312a4e0


    :/ :/ :-/

  • +hm+
    Da müssen dann mal ein paar reine Android Entwickler schauen, ob und wie sich so was realisieren lässt.
    Ich bin noch mindestens bis Mitte des Jahres zeittechnisch mit iOS ausgelastet.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!