Selektierte Zeilen in Listview nach dem Maximieren der App wieder selektieren

C

celli83

Neues Mitglied
0
Hallo,

ich bastle mir gerade eine ListView. Ich möchte verschiedene Zeilen selektieren. Das funktioniert auch. Wenn ich nun die App auf meinem Smartphone minimiere (z.B. Klick auf das Haus) und sie im Anschluss wieder maximiere, dann sind die selektierten Zeilen nicht mehr aktiviert. Im Debugger habe ich festgestellt, dass das Programm komplett von vorn wieder anfängt und somit meine Einträge (selektierten Zeilen) nicht mehr vorhanden sind. Wie kann ich das Problem lösen? Kann man Variablen, in diesem Fall eine List, so speichern, dass sie nach dem maximieren der App noch vorhanden sind?

Ich habe folgende Klassen. Die Codes sind teilweise aus dem Internet.

PHP:
 public class HomeScreenAdapter : BaseAdapter<TableItem>
 {
 
 List<TableItem> items;
 Activity context;
 
 public HomeScreenAdapter(Activity context, List<TableItem> items)
     : base()
 {
     this.context = context; 
     this.items = items; 
 }
 
 public override long GetItemId(int position)
 {
     return position;
 }
 
 public override TableItem this[int position]
 {
     get { return items[position]; }
 }
 
 public override int Count
 {
     get { return items.Count; }
 }
 
 public override View GetView(int position, View convertView, ViewGroup parent)
 {
 
     var item = items[position];
 
     View view = convertView;
     if (view == null)
          view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
     view.FindViewById<TextView>(Resource.Id.Head).Text = item.Heading;
     view.FindViewById<TextView>(Resource.Id.Subhead).Text = item.SubHeading;
     return view;
 }
 
 }
Meine Activity sieht so aus:

PHP:
 ListView listView;
 TableItem ti;
 List<TableItem> li = new List<TableItem>();
 HomeScreenAdapter homeAdapter; 
 
 protected override void OnCreate(Bundle bundle)
 {
     base.OnCreate(bundle);
 
     SetContentView(Resource.Layout.Main);
 
     listView = FindViewById<ListView>(Resource.Id.listView1);
 
     for (int i = 0; i < 50;i++ )
     {
         ti = new TableItem();
         ti.Heading = "Head" + i.ToString();
         ti.SubHeading = "Sub" + i.ToString();
         ti.ImageResourceId = 0;
         li.Add(ti);
     }
 
     homeAdapter = new HomeScreenAdapter(this, li);
 
     listView.Adapter = homeAdapter;
     listView.ItemClick += OnListItemClick; 
 }
 
 void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
 { 
     if(li[e.Position].Checked) 
     li[e.Position].Checked = false; 
     else 
     li[e.Position].Checked = true; 
 
     listView.InvalidateViews();
 }
Besten Dank für die Unterstützung.
 
Hallo celli83,

Du bist der erste C# Entwickler, der hier eine Frage stellt. Normalerweise tummeln sich hier nur Java-Entwickler.

Ich vermute, du benutzt Xamarin (Mono/.net). Da bist wahrscheinlich auf den Forum von Xamaria besser aufgehoben.

Xamarin Forums

Du solltest Dir vielleicht überlegen, direkt Java zu programmieren, die Unterschiede zwischen C# und Java sind nicht so groß.
Der Vorteil wäre größerer Support, und schnellere Apps. Und eine neue Sprache lernen macht immer Spaß. :)

Das die Zeilen verschwinden, liegt am Lifecycle der Activities. Wie genau das unter .net umgesetzt wurde, muss du auf ein C# - Forum erfragen.
 
Hallo markus.tullius,

besten Dank für die Unterstützung. Es stimmt, Java ist gar nicht so viel anders wie C# :smile: Ich schaue es mir auf jeden Fall mal an.

Das Stichwort "LifeCycle" hat mir sehr geholfen. Ich habe bereits eine Lösung gefunden. :thumbsup:

Zum Speichern überschreibe ich die Methode "onSaveInstanceState". Gefunden habe ich das hier.

Recreating an Activity | Android Developers

Ist es irgendwie möglich, diese Methode in eine andere Klasse auszulagern oder muss das ausschließlich aus der Activity erfolgen? Hierzu kann ich nichts finden.

Danke und noch einen schönen Sonntag.

Gruß
celli83
 
Nein,

nicht so ohne weiteres. Die Klasse Activity ist ein zentraler Bestandteil von Android. Sie ist Teil eines Observer Pattern.
 
Super. Danke für die Info.

Gruß
celli83
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.366
590239
5
R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
D
Antworten
23
Aufrufe
2.383
Data2006
D
Zurück
Oben Unten