CustomList in Fragments

  • Antworten:12
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 8

30.01.2016, 00:50:19 via Website

Hallo,

ich programmiere gerade eine App, die auf eine Tab Navigation basiert. Es werden bei den verschiedenen Tabs natürlich verschiedene Fragments geladen. Außerdem verbinde ich alles mit Volley und MySQL. Ich habe auch die JSON Klassen und die Request fertig und erhalte Daten.

Wie schaffe ich es, dass mir in ein Fragment, dass einen ListView besitzt, die Daten eingetragen werden?

Bisher habe ich es so gemacht:

public class CustomList extends ArrayAdapter<String> {
private String[] titels;
private String[] texts;
private String[] autors;
private String[] datums;
private Activity context;

public CustomList(Activity context, String[] titels, String[] texts, String[] autors, String[] datums) {
    super(context, R.layout.list_view_layout, datums);
    this.context = context;
    this.titels = titels;
    this.texts = texts;
    this.autors = autors;
    this.datums = datums;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.list_view_layout, null, true);
    TextView textViewTitel = (TextView) listViewItem.findViewById(R.id.textViewTitel);
    TextView textViewText = (TextView) listViewItem.findViewById(R.id.textViewText);
    TextView textViewAutor = (TextView) listViewItem.findViewById(R.id.textViewAutor);
    TextView textViewDatum = (TextView) listViewItem.findViewById(R.id.textViewDatum);

    textViewTitel.setText(titels[position]);
    textViewText.setText(texts[position]);
    textViewAutor.setText(autors[position]);
    textViewDatum.setText(datums[position]);

    return listViewItem;
}

}

Und in der MainActivity dann:

    private void showJSON(String json){
    ParseJSON pj = new ParseJSON(json);
    pj.parseJSON();
    CustomList cl = new CustomList(this, ParseJSON.titels,ParseJSON.texts,ParseJSON.autors,ParseJSON.datums);
    listView.setAdapter(cl);
}

Klappte alles. Mir wurde in der MainActivity alles aus der Datenbank ausgegeben. Jetzt würde ich das gerne in Fragments machen, habe aber keinen Ansatz. Habt ihr Ideen?

Danke

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

30.01.2016, 09:12:33 via App

Eigentlich so ziemlich das gleiche. Du brauchst ein XML Layout dass du in der onCreateView inflatest und dann deine Views initialisierst. Dann kannst du die ListView im Fragment nutzen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Shustin

Antworten
  • Forum-Beiträge: 8

30.01.2016, 14:11:26 via Website

Ich bekomme es nicht auf die Reihe.. ^^ Könntest du mir ein Beispiel geben, wie du es machen würdest?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

30.01.2016, 17:01:18 via Website

Naja du erstellst ein standard Fragment:

public class ExampleFragment extends Fragment {

@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {

// Create the view from XML layout.
final View view = inflater.inflate(R.layout.fragment_example, null); //Hier dein ListView xml rein

ListView lv = (ListView) view.findViewById(R.id.listview); //ListView auf dem XML layout suchen
CustomList cl = new CustomList(this, ParseJSON.titels,ParseJSON.texts,ParseJSON.autors,ParseJSON.datums);
lv.setAdapter(cl);

// Perform additional configuration on layout components here.

return view;

}

}

Das wäre schonmal der Anfang.
Jetzt musst du noch per Bundle in dien FragmentDeine JsonDaten übergeben.
Zum übergeben der Daten weiteres hier:
http://stackoverflow.com/questions/7149802/how-to-transfer-some-data-to-another-fragment

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 8

30.01.2016, 21:57:23 via Website

Beim Daten übergeben bekomme ich leider einen Fehler:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

Main Activity:

        Bundle bundle = new Bundle();
    bundle.putString("e", "eee");
    OneFragment fragment = new OneFragment();
    fragment.setArguments(bundle);

Fragment in der onCreateView:

String s= this.getArguments().getString("e");

Wo ist da mein Fehler?

//sry, fehler gefunden :)

— geändert am 30.01.2016, 22:09:56

Antworten
  • Forum-Beiträge: 8

31.01.2016, 01:09:26 via Website

Das Bundle bleibt immer Null, obwohl ich es fülle.. ? (siehe oben, Fehler doch nicht gefunden)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

31.01.2016, 11:57:24 via App

Wie lautet denn die genaue Exception und der Code dazu?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 8

31.01.2016, 14:06:38 via Website

Main Activity:

Bundle bundle = new Bundle();
bundle.putString("e", "eee");
OneFragment fragment = new OneFragment();
fragment.setArguments(bundle);

Fragment:

String s= this.getArguments().getString("e");

Das Bundle ist nach entsprechender Abfrage null..

Was mache ich falsch?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

31.01.2016, 14:09:03 via App

hmm kann ich gerade auch nicht zu sagen. Werde es nachher selbst mal testen.

— geändert am 31.01.2016, 14:09:15

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 8

31.01.2016, 14:54:24 via Website

Mhh okay, jetzt mal unabhängig von dem Code den ich bisher habe, wie würdet/st Du/Ihr die Daten in die Fragmente übergeben und in einer ListView oder einem RecycleView ausgeben?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.170

31.01.2016, 19:00:25 via App

Nach dem offiziellen weg genau so wie du es vorhast.
In mehreren Projekten habe ich jedoch einen FragmentKonstruktor indem ich die Daten übergebe.
Dabei sind auch Daten Klassen welche sich nicht so einfach serialisieren bzw als Parcable speichern lassen deswegen ist das so gelöst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 8

31.01.2016, 21:21:23 via Website

Ich habe ein sehr gutes GitHub Projekt gefunden, welches mir geholfen hat.

github.com/itsPR/Recycler-Pro

Antworten

Empfohlene Artikel