Fragment in Listview einfügen um "Posts mit Grafik" anzeigen zu können

  • Hallo,


    ich würde gerne eine art "Facebook-Pinnwand" Programmieren.


    Nun habe ich mich gefragt wie ich das am besten mache und kam auf folgende Idee:



    Ich erstelle mir als erstes eine Tabed-Activity(damit ich mehrere
    Pinnwände habe oder Kategorisieren kann usw) dann erstell ich mir eine
    ListView und füge diese dann in dem jeweiligen Tab ein. Als nächstes
    erstelle ich mir dann ein fragment. In diesem fragment erstelle ich
    praktisch den post(oben links ein image, dann drunter nen textfeld
    usw.). Dieses Fragment füge ich dann der listView hinzu. Der Inhalt etc.
    wird dann jeweils dynamisch aus der DB gefüllt
    Der ablauf wäre dann folgendermaßen:
    1. User drückt auf "post erstellen"
    2. Fenster öffnet sich -> text wird geschrieben
    3. geschriebener Text wird in DB gespeichert
    4. bei auswahl des "Pinnwand-tab" wird aus der datenbank gelesen und damit das erstellte fragment mit inhalt gefüllt
    5. fragment wird in die liste des ListView für die Pinnwand gespeichert
    dies würde für jeden Post geschehen so das jedes Post ein fragment ist und dieses wiederum einen platz in der Liste füllt.
    Würde das programmtechnisch funktionieren oder gibt es eine bessere
    Lösung um so etwas wie eine Facebook-Pinnwand zu programmieren?



    Ich hoffe mein problem ist verständlich :D ansonsten einfach nachfragen :)


    bin für jede hilfe dankbar.


    Danke schonmal

  • An sich ist der Gedankengang richtig, nur füllst du eine ListView nicht mit Fragment(s/en), sondern nur mit den Inhalten aus der Datenbank (Text -> TextView) (bzw. auch einem Bild (ImageView), insofern du eine "custom ListView" erstellt hast und die jeweiligen Zugriffe gewährt worden sind).


    Hier wird dir die Vorgehensweise bei der Erstellung einer custom ListView erklärt - http://www.androidinterview.co…-text-using-arrayadapter/
    Ob diese hilfreich ist, weiß ich nicht, Google hat ja noch mehr zu zeigen ;)


    Um dann auch später auf dem Stand der Technik zu sein, wäre es angebracht, dann z.B. eine RecyclerView anstelle der Standard-ListView zu nutzen.


    Zusätzlich würde ich den zu erstellenden Post nicht in einem extra Fenster starten lassen, es sollte ein Textfeld unten sein, ein Button rechts daneben, um das dann abzuschicken (wie z.B. beim WhatsApp-Chat o.Ä.).


    Sobald ich Zeit dafür finde, kann ich mich ja auch damit auseinandersetzen.


  • Hi,
    danke für die Hilfe! :)


    also wenn ich das richtig verstehe brauche ich keine fragments mit dem "gedachten" layout zu erstellen sondern eine custom ListView?
    In der custom ListView kann ich dann auch alles so anordnen wie ich es brauche(also so wie in einem Fragment?) oder wie ist das?
    Kann ich dann die custom ListView in meine Tabed activity einfügen? Ich dachte nämlich das die tabed activity nur mit fragments gefüllt werden kann. :O


    Hab das falsch ausgedrückt, natürlich ist es ein extra textfeld mit einem Button daneben etc.



    Ich werde mir jetzt mal das von dir gepotete tutorial anschauen und nach RecyclerView googeln.


    danke soweit :)

  • Custom bedeutet nur "selbsterstellt".
    Es ist und bleibt eine ListView, bei der du eben nicht vorgegebene Eigenschaften, sondern eigene nutzt.


    Huh - da habe ich dich falsch verstanden - natürlich hast du deine Tabbed-Activity und bestückst diese mit Fragments, wobei das jeweilige Fragment dann die ListView enthält bzw. das, was du brauchst. Ich dachte zuerst, du wolltest Fragments in die ListView packen, damit diese die jeweiligen Eigenschaften besitzen (Bild anzeigen, Text anzeigen etc.).


    Tabbed-Activity <- Fragment <- ListView
    So in etwa grob dargestellt.


    EDIT: Im Nachhinein sehe ich, dass eine CardView ebenfalls recht hilfreich wäre.
    https://developer.android.com/…material/lists-cards.html


    Das hier scheint auch sehr lehrreich zu sein bezüglich der RecyclerView/CardView.
    http://java.dzone.com/articles…oid-recycler-and-cardview

  • Hmm naja so in der art habe ich das ja auch gedacht :D


    Ich habe ja die tabed activity, nennen wir sie "Pinnwand" hier sollen wie auf facebook user posts angezeigt werden ein post nach dem anderen. Deshalb dachte ich ich füge in dem ersten tab (Also der "Pinnwand") ein ListFragment hinzu(diese Liste kann ich ja dann anpassen, abstand von jedem post usw. oder?) in diese Liste wollte ich statt einem Text ein weiteres fragment hinzufügen das das design eines Posts enthält.


    [Blockierte Grafik: http://fs1.directupload.net/images/150113/9hafd3i7.png
    sprich die pinnwand page ist der erste Tab der tabed activity. In diesem tab ist ein ListFragment. Dieses list Fragment soll mit dem Fragment auf der rechten Seite gefüllt werden. Die Strings etc. in diesem fragment sollen wiederum aus der DB gefüllt werden.
    Das ListFragment der Pinnwand Page soll dann die ersten 10 einträge aus der DB lesen und die jeweiligen (ich nenne sie mal Desing-fagments) füllen und dann in der Liste nacheinander anzeigen.


    Das Fragment rechts ist übrigens lediglich ein RelativeLayout mit textfeldern etc. Ich dachte das ich eben einfach das Fragment so gestalte wie ich es brauche und dann letzendlich in die Liste des ListFragments einfüge aber das scheint ja nicht zu gehen


    Ich hoffe das alles ist verständlich :D

  • Also ich hab jez nen paar tutorials angescahut und auch gemacht.
    Ich bekomme es hin das meine mainActivity ein Fragment mit einer customList anzeigt usw.


    Was ich jedoch einfach nicht hinbekomme ist, dass meine "
    public class MainActivity extends ActionBarActivity" (also eine activivty mit tabs) eine custom list anzeigt.
    Ich habe mal das tutorial hier gemacht:
    http://www.tutorialsbuzz.com/2…nt-using-baseadapter.html
    Das Problem ist nun, das meine MainActivity tabs hat. Ein tab enthält ja immer in Fragment (platzhalter Fragments oder eben ein selbst gemachtes Fragment das mit newInstance(String a, String b) erzeugt wird. Ich habe also das MyListFragment aus dem tutorial um folgendes erweitert :


    in meiner mainActivity mache ich folgendes:


    ich bekomme allerdings eine leere seite. Was genau übersehe ich? bzw kann ich das überhaupt so machen?
    Hat sonst jemand nen tutorial oder nen code schnipsel wie ich es hinbekomme ein custom ListFragment (also die Liste davon so azupassen wie ich es will) in eine Tabed bzw ActionBar Activity einzufügen? Bin langsam echt am verzweifeln.


    Viele Grüße,
    zooky

  • Die *.xml-Datei zu deiner MyListFragment hätte ich gerne mal gesehen.
    In dieser musst du eine ListView reinkloppen:


    Das steht auf der Seite! :)

    Code
    <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    </ListView>


    Hier der komplette Code in der Datei:


    Hat deine MyListFragment eine onCreate()-Methode?

  • MyListFragment:


    MyListFragment.xml



    ListItem.xml


    RowItem.java



    MainActivity.java:



    CustomAdapter.java:



    das sind alle klasse die ich habe

  • hab nen neuen Versuch gestartet und bekomme trotzdem nen fehler :S
    ich poste ma meinen ganzen code:
    ListViewDemoAdapter:


    ListViewItem:


    MainActivity:


    DemoFragment:


    listViewItem.xml



    und ich bekomme folgenden error:


  • Code
    at de.dskupnjak.myapplication.ListViewDemoAdapter.getView(ListViewDemoAdapter.java:25)


    Hm, das ist das Einzige bei der Fehlerausgabe, was deinen Code bemeckert. :)
    Oh man, schade ist, dass hier keiner hilft bzw. helfen kann. D:

    ja :( hab gegoogelt und rumprobiert usw. aber ich kam bisher auf keine Lösung :S
    hast dir den code komplett angeschaut? Bin mir im Moment nocht sicher ob es Logisch bzw. von der "Technik" her überhaupt richtig aufgebot ist...

  • Erst einmal solltest du alle ausgegrauten "import"-Aktionen entfernen (diese bringen keine Lösung, sind aber unnötig :P).


    Lösung


    Bei der MainActivity setzt du bei "implements" den hier "DemoFragment.OnScoutLogInteractionListener" anstelle des allgemeinen OnScoutLogInteractionListener. Danach per ALT+Eingabe die notwendigen Funktionen hinzufügen lassen.


    Ich hoffe, deine "listViewItem.xml" heißt aber "listview_item.xml". :D


    Weiteres


    Zusätzlich solltest du dein "DemoFragment" zurückgeben lassen (also eine neue Instanz dessen) - als Beispiel in "case 2":


  • Also wenn ich in meiner main das

    Code
    DemoFragment.OnScoutLogInteractionLister

    in

    Code
    OnScoutLogInteractionLister

    ändert er es automatisch in

    Code
    DemoFragment.OnScoutLogInteractionLister

    (bei alt+EINGABE)


    die onScoutLogInteractionLister ist ja auch im DemoFragment drin von dem her passt das ja oder?


    2:
    ich mache doch ne newInstance von DemoFragmeht (in case 0 )


    Code
    switch(position){
               	case 0:
                   	return DemoFragment.newInstance("a", "b");
               	case 1:
                   	return BlankFragment.newInstance("a","b");
               	case 2:
                   	return PlaceholderFragment.newInstance(position + 1);
               	default:
                   	return PlaceholderFragment.newInstance(position + 1);
           	}

Jetzt mitmachen!

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