Wie finde ich meinen Listview?

  • Hi,


    ich habe in meine MainActivity ein FragmentTab eingebaut. In das eine Tab lade ich nun mit


    Code
    v = inflater.inflate(R.layout.dates_layout, container, false);


    mein benötigtes layout. Dieses Layout beinhaltet ein ListView mit der id datesListView.


    Wenn ich nun in der MainActivity versuche dieses ListView mittels


    Code
    ListView datesListView = (ListView)findViewById(R.id.datesListView);


    zu erhalten, bekomme ich nur null zurück. In dem R-File steht das listview aber unter id drin.


    Was mache ich verkehrt?


    Danke


    Claus

  • Die Frage ist, WANN Du das machst.


    Du solltest das in der OnCreate machen, nachdem Du manuell das ContentView gesetzt hast.
    Eventuell hast Du auch das falsche ContentView gesetzt.


    Mehr Code der betreffenden Methode (inklusive Signatur) könnte helfen.

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

  • Sicher mache ich das in onCreate. Hier der Teil des MainActivity



    So sieht das FragmentTab aus:



    Gruß


    Claus

  • Vermutung: Du hast das ListView im Layout für einen der Tabs hinterlegt.
    Mutmaßlich in R.layout.dates_layout. Klingt zumindest nach einer Liste.


    Wenn Du dann im R.layout.activity_main nach der ListView suchst, wirst Du sie nicht finden.
    Da ist sie nicht. Da sind nur der tabhost und tabcontent.
    (SubView des tabcontent? Dann isses beim Einhängen der Fragmente futsch.)


    Du bräuchtest schon spezielle Subklassen Deiner Fragmente und musst dort die Verdrahtung zum UI herstellen.
    (In dem Fall kannst Du erst auf die Inhalte zugreifen, nachdem onCreateView() erfolgreich durchlaufen ist. Würde ich in der onActivityCreated() machen.)


    Infos zum Fragment und seines Lebenszyklus:
    https://developer.android.com/…android/app/Fragment.html

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

  • Hm,


    kapier ich trotzdem nicht. Ja das ListView ist in einem Fragment. Und ja dieses Fragment ist anscheinen im OnCreate der MainActivity noch nicht intialisiert. Soweit kann ich Dir folgen. Aber wie und vor allem wann in welcher Methode der MAinActivity kann ich denn nun meinen Adapter für das ListView setzen?


    Gruß


    Claus

  • In der MainActivity gar nicht.


    Android hatte für die Phones bis zur letzten 2er Version nur die Möglichkeit, für jeden Screen eine Activity anzulegen.
    Mit der 3er für die Tablets kam dann das Problem, dass je nach Orientierung vielleicht ein, vielleicht zwei Screens angezeigt werden müssen. Da hat man dann die Fragmente eingeführt.
    Mit der 4er für Phones und Tablets wurden die Fragmente auch auf den Phones zur Verfügung gestellt und haben den Ansatz mit mehreren Fragmenten nahezu abgelöst.
    (Settings–Dialoge kommen meist noch in einer eigenen Activity, ansonsten werden nur Fragmente gewechselt)


    Das heißt, dass die gesamte Verwaltung Deiner ListView (und generell aller UI Elemente) in dem Fragment statt finden muss, das das ListView (oder die anderen UI Elemente) auch darstellt.
    Du kannst das an einen Service delegieren um den Datenzugriff vom Mainthread abzukoppeln, die Activity als allgemeinen Delegaten für alle ListViews einzusetzen ist aber unüblich.


    (So ist das halt, wenn man keine ViewController hat…)


    Quasi ist Deine Activity ausschließlich für das Darstellen und Auswechseln der einzelnen Fragmente da (dem UIPageViewController ähnlich), während jede dort registrierte Fragmentklasse für die Darstellung seines eigenen Inhalts selbst verantwortlich ist (ähnlich den zugewiesenen ViewControllern)
    Natürlich kannst Du bei den Fragmentklassen in Deiner Activity spezifische Properties setzen, um Einfluss auf gewisse Umstände zu nehmen.
    Die Darstellung der UI Elemente regelt aber die Fragmentklasse selbst.

    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 müßte ich nur noch herausfindem, wie ich dem Fragment bei der Erstellung ein paar Referenzen vom MainActivity mitgeben kann. Zum Beispiel brauche ich dringend den Context damit ich z.B. eine Datei lesen und schreiben kann. Oder um herauszufinden ob das Gerät online ist etc.


    Da aber das Fragment ja nicht mit new() erzeugt wird und ich somit keinen custom Kontruktor dafür erstellen kann, weiß ich nicht wie ich das mache.


    Gruß


    Claus

Jetzt mitmachen!

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