C# Xamarin.Android: Single Choice Items in Alert Dialog machen nichts??

  • Antworten:6
  • Bentwortet
Lukas R.
  • Forum-Beiträge: 180

28.10.2014, 09:40:03 via Website

Hallo
Ich habe einen AlertDialog gemacht in dem 3 Benutzernamen vorkommen.
Soweit sogut doch wenn man jetzt einen dieser Benutzernamen auswählt passiert nichts?
Ich habe im internet schon gesucht bin aber nicht fündig geworden.
Die einzigen Tutorials die ich gefunden habe waren für Eclipse.
Vielleicht könnt ihr mir weiterhelfen:
Hier der Code:

string[] Benutzer = Resources.GetStringArray (Resource.Array.Benutzer);
                AlertDialog.Builder builder;
                builder = new AlertDialog.Builder (this);
                builder.SetTitle ("Benutzer wählen ...");
                builder.SetSingleChoiceItems (Benutzer, 0, (o, e) => {

                    if(Benutzer.Equals("Salih")){

                    TextView name = FindViewById<TextView> (Resource.Id.navdrawername);
                    name.Text = "Salih Kuljancic";

                    ImageView bild = FindViewById<ImageView> (Resource.Id.imageView2);
                    bild.SetImageResource(Resource.Drawable.salih);

                    }
                    else if(Benutzer.Equals("Lukas")){

                        TextView name = FindViewById<TextView> (Resource.Id.navdrawername);
                        name.Text = "Lukas Reiner";

                        ImageView bild = FindViewById<ImageView> (Resource.Id.imageView2);
                        bild.SetImageResource(Resource.Drawable.lukas);

                    }

                });

                builder.Show ();

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.10.2014, 17:16:36 via App

Na ja ich bin mir nicht sicher ob Lambada Expressions in diesem Fall sinvoll sind. Hat der Alert Dialog auch so ne art click oder change Listener?

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

Antworten
Lukas R.
  • Forum-Beiträge: 180

29.10.2014, 08:43:51 via Website

ja den habe ich jetzt versucht einzubauen:
Hier meine neue Variante ( bei dieser Variante wird mir zwar kein Fehler angezeigt jedoch wenn man auf ein Item klickt passiert wieder nichts:

 AlertDialog.Builder builder;
                builder = new AlertDialog.Builder(this);
                builder.SetTitle("Benutzer wählen ...");
                builder.SetItems(Benutzer, listener);
                builder.Show();

            }; 
        }
                public void listener(object sender, Android.Content.DialogClickEventArgs args)
                 {


                      if(Benutzer.Equals("Lukas Reiner"))
                      {

                            TextView name2 = FindViewById<TextView>(Resource.Id.navdrawername);
                            name2.Text = "Lukas Reiner";

                            ImageView bild2 = FindViewById<ImageView>(Resource.Id.imageView2);
                            bild2.SetImageResource(Resource.Drawable.lukas);

                      }

                      else if(Benutzer.Equals("Salih Kuljancic"))
                      {

                            TextView name = FindViewById<TextView>(Resource.Id.navdrawername);
                            name.Text = "Salih Kuljancic";

                            ImageView bild = FindViewById<ImageView>(Resource.Id.imageView2);
                            bild.SetImageResource(Resource.Drawable.salih);


                      }

                 }

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.10.2014, 09:46:39 via App

Dieser Artikel beschreibt es gut http://www.codeproject.com/Articles/685970/MonoAndroid-Using-AlertDialog

Benutze mal den Debugger oder einen Log und schaue ob er denn in deine Listener Methode springt. vlt ist da ja was falsch.

Edit: woher nimmst du dei e Variable Benutzer?
Du weisst doch gar nicht was geklickt wurde, der benutzer muss erst ermittelt werden z.b über den click event oder Benutzer=alertDialog.getSelectedItem().ToString()

Auf jeden fall muss da was geändert werde

— geändert am 29.10.2014, 09:49:25

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

Antworten
Lukas R.
  • Forum-Beiträge: 180

29.10.2014, 10:23:41 via Website

Benutzer ist in der onCreate schon definiert:

 Benutzer =  Resources.GetStringArray(Resource.Array.Benutzer);

Von dieser Array nimmt er ja die Strings und setzt sie als Item ein.
Ich probiere es jetz mal wie du es gepostet hast mit einer ListView im AlertDialog
Feedback werde ich hier rein schreiben dann.

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Lukas R.
  • Forum-Beiträge: 180

29.10.2014, 11:46:00 via Website

Ok habe es jetzt wie in dem Beispiel gezeigt gemacht
Widerum werden die Benutzer als ListView im AlertDialog genau angezeigt doch wenn man auf sie klickt passiert nichts.
Ich denke dass der AlertDialog schon auf die onClick Methode (listener in meinem Fall) übergreift jedoch die if Schleife die sich darin befindet nicht angenommen wird.
Hier der neue Code:

Button button = FindViewById<Button>(Resource.Id.navdrawerbutton);
            button.Click += methodInvokeAlertDialogWihtListView;

        }
            void methodInvokeAlertDialogWihtListView (object sender, EventArgs e)
            {




                AlertDialog.Builder builder;
                builder = new AlertDialog.Builder(this);
                builder.SetTitle("Benutzer wählen ...");
                var listView = new ListView (this);
                listView.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, Benutzer);
                listView.ItemClick += listener;
                builder.SetView (listView);
                builder.Show();
            }


                 void listener(object sender, AdapterView.ItemClickEventArgs e)
                 {


                      if(Benutzer.Equals("Lukas Reiner"))
                      {

                            TextView name2 = FindViewById<TextView>(Resource.Id.navdrawername);
                            name2.Text = "Lukas Reiner";

                            ImageView bild2 = FindViewById<ImageView>(Resource.Id.imageView2);
                            bild2.SetImageResource(Resource.Drawable.lukas);

                      }

                      else if(Benutzer.Equals("Salih Kuljancic"))
                      {

                            TextView name = FindViewById<TextView>(Resource.Id.navdrawername);
                            name.Text = "Salih Kuljancic";

                            ImageView bild = FindViewById<ImageView>(Resource.Id.imageView2);
                            bild.SetImageResource(Resource.Drawable.salih);


                      }

                 }

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Lukas R.
  • Forum-Beiträge: 180

29.10.2014, 13:01:10 via Website

Ok ich habs selber herausgefunden
Ich musste noch die Position von e definieren
Hier der funktionierende code:

        Button button = FindViewById<Button>(Resource.Id.navdrawerbutton);
        button.Click += methodInvokeAlertDialogWihtListView;

    }
    void methodInvokeAlertDialogWihtListView(object sender, EventArgs e)
    {




        AlertDialog.Builder builder;
        builder = new AlertDialog.Builder(this);
        builder.SetTitle("Benutzer wählen ...");
        var listView = new ListView(this);
        listView.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, Benutzer);
        listView.ItemClick += listener;
        builder.SetView(listView);
        builder.Show();
    }


    void listener(object sender, AdapterView.ItemClickEventArgs e)
    {
        var Benutzer1 = Benutzer[e.Position];

        if (Benutzer1.Equals("Lukas Reiner"))
        {

            TextView name2 = FindViewById<TextView>(Resource.Id.navdrawername);
            name2.Text = "Lukas Reiner";

            ImageView bild2 = FindViewById<ImageView>(Resource.Id.imageView2);
            bild2.SetImageResource(Resource.Drawable.lukas);

            return;

        }

        else if (Benutzer1.Equals("Salih Kuljancic"))
        {

            TextView name = FindViewById<TextView>(Resource.Id.navdrawername);
            name.Text = "Salih Kuljancic";

            ImageView bild = FindViewById<ImageView>(Resource.Id.imageView2);
            bild.SetImageResource(Resource.Drawable.salih);

            return;
        }

    }

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten