ArrayList an Activity übertragen

  • Antworten:4
  • Bentwortet
Tanja Z.
  • Forum-Beiträge: 52

02.08.2011, 21:01:50 via Website

Hallo!

Ich habe folgenden Code:

1public class ListCursorAdapter extends SimpleCursorAdapter {
2
3 private Cursor c;
4 private Context context;
5 ArrayList<String> anfang = new ArrayList<String> ();
6 ArrayList<String> ende = new ArrayList<String>();
7
8
9 public ListCursorAdapter(Context context, int layout, Cursor c,
10 String[] from, int[] to) {
11 super(context, layout, c, from, to);
12 this.c = c;
13 this.context = context;
14
15 // TODO Auto-generated constructor stub
16 }
17 public View getView(final int position, View convertView, ViewGroup parent) {
18 View view = super.getView(position, convertView, parent);
19 final Cursor cursor = getCursor();
20 cursor.moveToPosition(position);
21 final CheckBox cb = (CheckBox) view.findViewById(R.id.check_messe_auswaehlen);
22 check.setOnClickListener(new OnClickListener() {
23
24
25 @Override
26 public void onClick(View v) {
27 if (cb.isChecked() ) {
28 String beginn = cursor.getString(cursor.getColumnIndex(MesseTbl.MESSEBEGINN));
29 String ende = cursor.getString(cursor.getColumnIndex(MesseTbl.MESSEENDE));
30 anfang.add(beginn);
31 ende.add(ende);
32
33 }
34
35 // TODO Auto-generated method stub
36
37 }
38 });
39 return view;

Wie kann ich die Daten aus der ArrayList in eine Activity übertragen? Danke im voraus für Eure Hilfe.

Grüße,

Tanja

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

02.08.2011, 22:10:40 via Website

Zunächst musst Du die Objekte in Deiner ArrayList "serializieren". Also:

1public class DeineKlasse implements Serializable

Hier der Aufruf der Activity:

1ArrayList<DeineKlasse> klassen ...
2...
3
4Intent intent = new Intent(this, DeineActivity.class);
5Bundle bundle = new Bundle();
6bundle.putSerializable("ARRAYLIST", klassen);
7intent.putExtras(bundle);
8intent.putExtra("POSITION", position); // Falls Du noch die Position aus Deinem Adapter brauchst
9startActivityForResult(intent, 1);

Nun der onCreate() in Deiner Activity:

1ArrayList<DeineKlasse> klassen ...
2...
3
4Bundle bundleExtras = getIntent().getExtras();
5if (bundleExtras != null) {
6 klassen = (ArrayList<DeineKlasse>) getIntent().getSerializableExtra("ARRAYLIST");
7 position = bundleExtras.getInt("POSITION");
8}

Ich muss noch anmerken das das "dreckig" ist und langsam. Wenn Du einen Weg siehst drumherum zu kommen dann nutze diesen.

Gruß
Harald

Antworten
Tanja Z.
  • Forum-Beiträge: 52

02.08.2011, 23:13:05 via Website

Danke Harald für Deine Antwort! Wenn die Übertragung der ArrayList zu langsam ist, dann werde ich einen anderen Weg suchen.

Grüße,

Tanja

Antworten
Florian B.
  • Forum-Beiträge: 284

03.08.2011, 09:48:19 via Website

Größere Datenstrukturen sollte man nicht als Intent zwischen Activities austauschen, da das Serialisieren und Deserialisieren, wie Harald schon sagte, sehr aufwändig ist.

Es wäre besser die ArrayList irgendwo zentral zwischen zu speichern, und in der nächsten Activity die ArrayList dort wieder her zu holen. Eventuell kann man der neuen Activity nur eine Art Key mitzugeben, der beschreibt, wo die ArrayList zu finden ist. Eine Möglichkeit wäre eine Singleton Klasse oder eine Klasse die vom Typ Application abgeleitet ist, die du zum Austausch von größeren Daten nutzen kannst.

Antworten
Tanja Z.
  • Forum-Beiträge: 52

03.08.2011, 21:34:01 via Website

Die Frage hat sich erledigt, weil ich das Programm so geändert habe, dass ich die ArrayList nicht mehr weitergeben muß. Ich hab die Daten aus der ArrayList direkt im Cursor ausgewertet, so dass nur ein Objekt mit einem Wert an die andere Activity übergeben konnte.

Trotzdem Danke für Eure Hilfe.


Grüße,

Tanja

Antworten