How to get item selected in Spinner to use it as string? - c#

Just looking to see if I can find out how i get the item selected in the spinner and store it in a string, i have seen the other posts about this and people say to put this line into code:
(Beneath the last line of the code i posted below)
String Genders = Gender.getSelectedItem().toString();
I try but it gives me a red line underneath (getselecteditem()) - saying spinner does not contain a definition for getselecteditem()
Here is my code:
Spinner Gender;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Form);
var Genders = new String[]
{
"Male", "Female"
};
BaseMale = 2000;
Gender = FindViewById<Spinner>(Resource.Id.spinner1);
Gender.Adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, Genders);
Would really appreciate any of your help! :)

you might need to implement the selection handle (ItemSelected) like in this example from https://developer.xamarin.com/guides/android/user_interface/spinner/:
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "Main" layout resource
SetContentView (Resource.Layout.Main);
Spinner spinner = FindViewById<Spinner> (Resource.Id.spinner);
spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs> (spinner_ItemSelected);
var adapter = ArrayAdapter.CreateFromResource (
this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem);
adapter.SetDropDownViewResource (Android.Resource.Layout.SimpleSpinnerDropDownItem);
spinner.Adapter = adapter;
}
and here is the handle, the index to selected item appears as e.Position here.
private void spinner_ItemSelected (object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format ("The planet is {0}", spinner.GetItemAtPosition (e.Position));
Toast.MakeText (this, toast, ToastLength.Long).Show ();
}

Related

i use Intent to put extra and get extra on activity but next time data of get extra is data of first put extra (sorry my english is bad)

ex: first time: i put 18001090 and i receive : 18001090
second time: i put 056113 but i receive : 18001090
I put extra
Intent notificationIntent = new Intent(context, typeof(MainActivity));
notificationIntent.SetAction("android.intent.action.MAIN");
notificationIntent.PutExtra("number", incomingNumber);
On MainActivity
var number = this.Intent.GetStringExtra("number");
I use Intent to put extra and get extra, but I don't get the result as you, here is my code.
I add EditText and Button on layout5 and TextView on layout6.
Mainactivity:
private EditText edittext;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout5);
btn1 = FindViewById<Button>(Resource.Id.button1);
edittext = FindViewById<EditText>(Resource.Id.edittext1);
btn1.Click += Btn1_Click1;
}
private void Btn1_Click1(object sender, EventArgs e)
{
Intent i = new Intent(this, typeof(Activity1));
//Add PutExtra method data to intent.
i.PutExtra("Name", edittext.Text.ToString());
//StartActivity
StartActivity(i);
}
Avtivity1:
private TextView text;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout6);
// Create your application here
string name = Intent.GetStringExtra("Name");
text = FindViewById<TextView>(Resource.Id.textview1);
text.Text = name;
Log.Debug("123" ,name);
}

why isn't my listview refreshed in xamarin.android

Hello I have the following code
public class MainActivity : Activity
{
Button b;
Button c;
TextView t;
List<string> tasks = new List<string>();
ListView lView;
ArrayAdapter<string> adapter;
int count = 0;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
b = FindViewById<Button>(Resource.Id.btn);
c = FindViewById<Button>(Resource.Id.clearBtn);
t = FindViewById<TextView>(Resource.Id.tView);
lView = FindViewById<ListView>(Resource.Id.listView);
adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1,tasks);
lView.Adapter = adapter;
b.Click += ChangeTextAndAdd;
}
}
private void ChangeTextAndAdd(object sender, EventArgs e)
{
t.Text = "text is changed";
string listItem = string.Format("task{0}", count++);
tasks.Add(listItem);
adapter.NotifyDataSetChanged();
}
My question is why doesn't my listview update when I click on my button. I don't understand it because I have used adapter.NotifyDataSetChanged(); but it doesn't work. Is there something I've been missing?
This code only add the item to the list, but doesn't update the array adapter:
tasks.Add(listItem);
Either add the item directly to the adapter:
adapter.Add(listItem);
or after you add the item to the list, clear the adapter and re-add the list to it:
adapter.Clear();
adapter.Add(tasks);

Xamarin Forms: Android: Toast Notifications Clicked

I am on the most current version of Xamarin Forms. I have a Content Page. The Content Page has a content that has a Button. That Button has Button_Clicked event Which you can see below. I use IToastNitificator (https://github.com/EgorBo/Toasts.Forms.Plugin), and I try to pass when I send this notification after I close my app, and after I clicked the Notification my App doesn't pop up Again. Anybody can help me how can I reach this?
This is my Button_Clicked method:
private async void Button_Clicked(object sender, EventArgs e)
{
var notificator = DependencyService.Get<IToastNotificator>();
var options = new NotificationOptions()
{
Title = "Teszt",
Description = "Önnek teszteket kell kitöltenie!",
IsClickable = true
};
var result = await notificator.Notify(options);
if(result.Action == NotificationAction.Clicked)
{
await Navigation.PushAsync(new QuestionPage());
}
}
I registered this Dependency and It's working fine.
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate (Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate (bundle);
Xamarin.Forms.DependencyService.Register<ToastNotification>();
Xamarin.Forms.DependencyService.Register<OpenAppAndroid>();
ToastNotification.Init(this);
BluetoothLowEnergyAdapter.Init(this);
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new Spirocco.App (BluetoothLowEnergyAdapter.ObtainDefaultAdapter(ApplicationContext)));
}
}
To reopen the Android application you need to set the ForceOpenAppOnNotificationTap to true in the AndroidOptions
Example:
var options = new NotificationOptions()
{
Title = "Teszt",
Description = "Önnek teszteket kell kitöltenie!",
IsClickable = true,
AndroidOptions = new AndroidOptions()
{
ForceOpenAppOnNotificationTap = true
}
};

Save checkbox state android xamarin

I am new on xamarin and i am trying to save my checkbox state even if the app is closed because when i close it the checkbox reset to uncheck state...
also.. the image that was changed resets.. is there any way to preserve both?
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout1);
var seletor = FindViewById<CheckBox>(Resource.Id.checkBox1);
var imagem = FindViewById<ImageView>(Resource.Id.imageView1);
seletor.Click += (o, e) => {
if (seletor.Checked)
imagem.SetImageResource(Resource.Drawable.estado1);
else
imagem.SetImageResource(Resource.Drawable.estado2);
};
}
Have you tried to use the Preferences?
Check the following: How to save user settings
Store the option selected onclose or suspend.. and retrieve onResume / OnLoad
Something like:
// Function called from OnDestroy
protected void saveset(){
//store
var prefs = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private);
var prefEditor = prefs.Edit();
prefEditor.PutString("PrefName", "Some value");
prefEditor.Commit();
}
// Function called from OnCreate
protected void retrieveset()
{
//retreive
var prefs = Application.Context.GetSharedPreferences("MyApp", FileCreationMode.Private);
var somePref = prefs.GetString("PrefName", null);
//Show a toast
RunOnUiThread(() => Toast.MakeText(this, somePref, ToastLength.Long).Show());
}
as in the link provided.
Of course you'll need to adapt to your needs and get / populate the value of the checkbox.
If you want, you can also implement some kind of db and use the same mechanism to persist and retrieve settings.
This is usually what I use to store settings and persist values that I need to "remember"
This is an example of how I'm using the same behavior in one app.. not for a checkbox.. but you can see how it works. I removed some code, but I think should be a good example.
[Activity(Label = "#string/ApplicationName",
Icon = "#drawable/Icon")]
public class PersonalDetailsActivity : Activity
{
...
private ISharedPreferencesEditor prefEditor;
private ISharedPreferences preferences;
...
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.PersonalDetailView);
preferences = Application.Context.GetSharedPreferences("AppName", FileCreationMode.Private);
PopulatePersistedData();
}
private void PopulatePersistedData()
{
myId = preferences.GetInt(nameof(myData.Id), 0);
name.Text = preferences.GetString(nameof(myData.Name), null);
address.Text = preferences.GetString(nameof(myData.Address), null);
city.Text = preferences.GetString(nameof(myData.City), null);
county.Text = preferences.GetString(nameof(myData.County), null);
emailAddress.Text = preferences.GetString(nameof(myData.Email), null);
phoneNumber.Text = preferences.GetString(nameof(myData.PhoneNumber), null);
bio.Text = preferences.GetString(nameof(myData.Bio), null);
rating.Rating = 5;
}
private void SaveButton_Click(object sender, EventArgs e)
{
prefEditor = preferences.Edit();
myData = new Citizen();
myData.Name = name.Text;
myData.Address = address.Text;
myData.City = city.Text;
myData.County = county.Text;
myData.Email = emailAddress.Text;
myData.PhoneNumber = phoneNumber.Text;
myData.Bio = bio.Text;
prefEditor.PutInt(nameof(myData.Id), myId);
prefEditor.PutString(nameof(myData.Name), myData.Name);
prefEditor.PutString(nameof(myData.Address), myData.Address);
prefEditor.PutString(nameof(myData.City), myData.City);
prefEditor.PutString(nameof(myData.County), myData.County);
prefEditor.PutString(nameof(myData.Email), myData.Email);
prefEditor.PutString(nameof(myData.PhoneNumber), myData.PhoneNumber);
prefEditor.PutString(nameof(myData.Bio), myData.Bio);
prefEditor.Apply();
prefEditor.Commit();
var intent = new Intent();
intent.PutExtra("CitizenName", name.Text);
SetResult(Result.Ok, intent);
this.Finish();
}
}

Loading a string into a textview

I need to load a string into a textview that is being displayed on a new page after a button click event. A java.lang.runtimeexception keeps getting thrown when i click the button. "java.lang.reflect.InvocationTargetException"
Here is that section of my code:
SetContentView (Resource.Layout.Main);
Button button1 = FindViewById<Button>(Resource.Id.story1);
button1.Click += delegate {
SetContentView (Resource.Layout.next1);
TextView textvtest = (TextView) FindViewById(Resource.Id.textView1);
textvtest.Text = "test";
};
From the first activity, in buttonClick :
button1.Click += delegate {
var activity2 = new Intent (this, typeof(Activity2));
activity2.PutExtra ("MyData", "test");
StartActivity (activity2);
};
In the second activity, in onCreate() :
protected override void OnCreate (Bundle bundle)
{
SetContentView (Resource.Layout.next1);
TextView textvtest = (TextView) FindViewById(Resource.Id.textView1);
string text = Intent.GetStringExtra ("MyData") ?? "Data not available";
textvtest.Text = text;
}
I don't know if this matters, but other examples of setting textviews with C# include
(object sender, EventArgs e)
after
delegate
like
delegate(object sender, EventArgs e)
your code was a little bit wrong, try this
SetContentView (Resource.Layout.Main);
Button button1 = FindViewById<Button>(Resource.Id.story1);
button1.Click += delegate {
SetContentView (Resource.Layout.next1);
TextView textvtest = FindViewById<TextView>(Resource.Id.textView1);
textvtest.Text = "test";
};

Categories