Kann eine ListView Fragmente enthalten?

Wie in können die ELEMENTS einer ListView Fragmente sein. Ich weiß, dass Sie einer ListView eine TextView-XML zuweisen können, um die Darstellung zu ändern, aber Sie können einer ListView auch Fragmente hinzufügen.

Zum Beispiel: Ich habe ein Fragment. Das XML für dieses Fragment enthält eine ImageView, einige TextViews im großen Stil und eine TextView im kleinen Stil. Der Fragment-Klassencode empfängt ein Bundle und füllt dann die TextViews und ImageView entsprechend auf der Grundlage des Inhalts. Sowohl der Fragment-XML- als auch der Fragment-Code funktionieren problemlos (ich kann ein einzelnes Fragment problemlos anzeigen). Ich habe eine FragmentActivity, in der ich die oben genannte Liste der Fragmente anzeigen möchte. Hier ist der Code, mit dem ich versuche, die ListView in der View von FragmentActivity zu füllen:

    ArrayList<Fragment> fragList = new ArrayList<Fragment>();
    Fragment fragment = Fragment.instantiate(this, TileItem.class.getName());
    Bundle bundle = new Bundle();
    bundle.putInt("key", 0);
    fragment.setArguments(bundle);
    fragList.add(fragment);

    ArrayAdapter<Fragment> adapter = new ArrayAdapter<Fragment>(this, R.layout.tile_item, fragList);
    listItems.setAdapter(adapter);

Hier ist meine Denkweise dazu. Ich erstelle eine ArrayList mit Fragmenten, um alle meine instanziierten Views zu speichern. Dann erstelle ich ein Fragment, erstelle ein Bundle, füge dem Bundle Daten hinzu (damit das Fragment Daten korrekt in seinen Views zusammenfassen kann), füge das Bundle dem Fragment hinzu und füge das Fragment schließlich der ArrayList hinzu. Danach erstelle ich einen ArrayAdapter, füge das gewünschte Elementlayout und die Liste der von mir erstellten Fragmente hinzu. Stellen Sie dann die ListView so ein, dass sie von meinem Adapter liest.

Jeder, der diesen Code ausführt, erhält wahrscheinlich den NPE @, der den ArrayAdapter instanziiert. Was gibt? Ist das überhaupt möglich? Kann mir jemand sagen, ob ich nur meine Zeit vergeude? Gibt es einen besseren Weg? Ich habe überlegt, eine ScrollView zu verwenden, aber es müsste so viel von der Funktionalität einer ListView neu implementiert werden, und ich hasse es, das Rad neu zu erfinden, wenn es nicht notwendig ist.

Vielen Dank an alle, die gelesen haben, und vor allem an Sie für Ihre Gedanken, wenn Sie sich entscheiden, sie zu verlassen. Ich habe versucht, nach einer etablierten Antwort auf diese Frage zu suchen, aber alles, was ich zu finden scheine, sind Fragen / Webseiten zur Verwendung von ListView INSIDE eines Fragments. Fragmente nicht ALS ELEMENTE einer ListView verwenden

Bearbeiten: Ich nahm die folgenden Vorschläge und begann mehr zu untersuchen. So wie es aussieht, sollte es mir möglich sein, einen benutzerdefinierten Adapter zu verwenden, der Fragmente aufbläst, anstatt einfach nur aus XML zu erstellen (da es keine bessere Möglichkeit gibt, den Prozess zu beschreiben). Meine aktuelle Implementierung löst jedoch beim Festlegen einen NPE aus der Adapter.

Hier ist mein benutzerdefinierter Adaptercode (der Kürze halber gekürzt):

public class AdapterItem extends ArrayAdapter<Fragment> {

Context c;
List<Fragment> f;

public AdapterItem(Context c, List<Fragment> f) {
    super(c, R.layout.tile_item, f);
    this.c = c;
    this.f = f;
}

@Override
public View getView(int pos, View v, ViewGroup vg) {
    LayoutInflater i = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return i.inflate(R.layout.tile_item, vg, false);
}

}

und so setze ich es um:

ArrayList<Fragment> fragList = new ArrayList<Fragment>();
    Fragment fragment = Fragment.instantiate(this, TileItem.class.getName());
    Bundle bundle = new Bundle();
    bundle.putInt("key", 0);
    fragment.setArguments(bundle);
    fragList.add(fragment);

    AdapterItem adapter = new AdapterItem(this, fragList);
    adapter.add(fragment);
    listItems.setAdapter(adapter);

Es ist also ein paar Tage her und ich bin mir ziemlich sicher, dass dieser Thread vergraben wurde. Ich dachte jedoch, ich würde ein letztes Update hinzufügen, nur für den Fall, dass jemand dies versuchen möchte und eine Google-Suche sie hierher bringt. In meiner Implementierung erhalte ich also eine NPE, wenn der ListView den Adapter erhält. Ein Raketenchirurg muss nicht herausfinden, dass es sich mit Sicherheit um den Adapter handelt und nicht um die ListView, die den Fehler auslöst. Für das Leben von mir kann ich nicht herausfinden, warum obwohl ...

Jedenfalls denke ich, dass ich eine Idee habe. Zunächst eine kleine Hintergrundgeschichte: Vor einiger Zeit habe ich versucht, FragmentTransactions innerhalb eines FragmentDialogs zu erstellen. Jedes Mal, wenn ich es versuchte, bekam ich eine NPE. Schließlich entdeckte ich durch viele Nachforschungen, dass der Grund für die Art und Weise, wie Fragmente instanziiert werden, lag. Wenn ein Fragment aufgerufen wird, benötigt es den Kontext des übergeordneten Elements. Da das übergeordnete Element eines Dialogfelds die Aktivität ist, die es gestartet hat, hat das Dialogfeld selbst die erforderlichen Kriterien nicht erfüllt. Ich glaube, dass dies auch der Fall ist, wenn Sie versuchen, Fragmente zu einer ListView hinzuzufügen. Da die ListView nicht der Vereinbarung entspricht, ein Fragment zu instanziieren, löst sie die NPE aus und lässt mich daher hängen und zu den Konventionen zurückkehren. D @ mn ... Ich hatte wirklich gehofft, dass ich das schaffen würde. Die Verwendung von Fragmenten anstelle von einfachem XML hätte das Organisieren / Durchsuchen der Liste erheblich erleichtert. Na ja ... schätze, es kann nicht gemacht werden, falls sich jemand wundert.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage