如果用户不检查Xamarin Android中的单选按钮,如何显示异常消息?
问题描述:
嗨如果用户没有检查单选按钮,我需要在屏幕上显示一条错误消息。在这个代码中,有4个单选按钮分为13个单选按钮。 我试图使用try/catch和if/else但屏幕仍然没有显示Toast错误消息。 另一个疑问:我知道广播组不允许一个人选择超过1个选项,但我怎样才能做一个让用户只需选择一个单一广播组的按钮的exceleiton? 例如:现在我必须选择至少4个按键(每个无线电组1),但我想这样做的方式,随便一个组中的一个就可以了如果用户不检查Xamarin Android中的单选按钮,如何显示异常消息?
下面是代码
using Android.App;
using Android.Content.PM;
using Android.Content.Res;
using Android.OS;
using Android.Support.V4.Widget;
using Android.Views;
using Android.Widget;
using System.Collections;
using Android.Support.V7.App;
using Android.Support.V4.View;
using Android.Support.Design.Widget;
using Auth0.OidcClient;
using Android.Content;
using IdentityModel.OidcClient;
using Android.Graphics;
using System.Net;
using System;
using Android.Runtime;
using Android.Text.Method;
using System.Text;
namespace whirlpoolapp
{
[Activity(Label = "whirlpoolapp", MainLauncher = true)]
[IntentFilter(
new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "whirlpoolapp.whirlpoolapp",
DataHost = "lucasmoreira.auth0.com",
DataPathPrefix = "/android/whirlpoolapp.whirlpoolapp/callback")]
public class MainActivity : Activity
{
private ArrayList enderecos;
TextView queroreconhecer;
TextView crie;
TextView conquiste;
TextView entregue;
TextView viva;
TextView comentar;
EditText comentário;
Spinner spinner;
ArrayAdapter adapter;
RadioGroup rdgcrie;
RadioGroup rdgconquiste;
RadioGroup rdgentregue;
RadioGroup rdgviva;
Button enviar;
private Auth0Client client;
private AuthorizeState authorizeState;
ProgressDialog progress;
protected override void OnResume()
{
base.OnResume();
if (progress != null)
{
progress.Dismiss();
progress.Dispose();
progress = null;
}
}
protected override async void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
var loginResult = await client.ProcessResponseAsync(intent.DataString, authorizeState);
var sb = new StringBuilder();
if (loginResult.IsError)
{
sb.AppendLine($"An error occurred during login: {loginResult.Error}");
}
else
{
sb.AppendLine($"ID Token: {loginResult.IdentityToken}");
sb.AppendLine($"Access Token: {loginResult.AccessToken}");
sb.AppendLine($"Refresh Token: {loginResult.RefreshToken}");
sb.AppendLine();
sb.AppendLine("-- Claims --");
foreach (var claim in loginResult.User.Claims)
{
sb.AppendLine($"{claim.Type} = {claim.Value}");
}
}
}
private async void LoginButtonOnClick(object sender, EventArgs eventArgs)
{
progress = new ProgressDialog(this);
progress.SetTitle("Log In");
progress.SetMessage("Please wait while redirecting to login screen...");
progress.SetCancelable(false); // disable dismiss by tapping outside of the dialog
progress.Show();
// Prepare for the login
authorizeState = await client.PrepareLoginAsync();
// Send the user off to the authorization endpoint
var uri = Android.Net.Uri.Parse(authorizeState.StartUrl);
var intent = new Intent(Intent.ActionView, uri);
intent.AddFlags(ActivityFlags.NoHistory);
StartActivity(intent);
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
client = new Auth0Client(new Auth0ClientOptions
{
Domain = Resources.GetString(Resource.String.auth0_domain),
ClientId = Resources.GetString(Resource.String.auth0_client_id),
Activity = this
});
//preenche o arraylist com os dados
GetEmails();
//cria a instância do spinner declarado no arquivo Main
spinner = FindViewById<Spinner>(Resource.Id.spnDados);
//cria textview
queroreconhecer = FindViewById<TextView>(Resource.Id.txtReconhecer);
crie = FindViewById<TextView>(Resource.Id.txtCrie);
conquiste = FindViewById<TextView>(Resource.Id.txtConquiste);
entregue = FindViewById<TextView>(Resource.Id.txtEntregue);
viva = FindViewById<TextView>(Resource.Id.txtViva);
comentar = FindViewById<TextView>(Resource.Id.txtComentário);
comentário = FindViewById<EditText>(Resource.Id.edtComentario);
rdgcrie = FindViewById<RadioGroup>(Resource.Id.rdgCrie);
rdgconquiste = FindViewById<RadioGroup>(Resource.Id.rdgConquiste);
rdgentregue = FindViewById<RadioGroup>(Resource.Id.rdgEntregue);
rdgviva = FindViewById<RadioGroup>(Resource.Id.rdgViva);
adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, enderecos);
spinner.Adapter = adapter;
spinner.ItemSelected += Spinner_ItemSelected;
enviar = FindViewById<Button>(Resource.Id.button1);
enviar.Click += enviar_Click;
void GetEmails()
{
enderecos = new ArrayList();
enderecos.Add("Escolha um colaborador abaixo");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("ana_carolina_simoes @whirlpool.com");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("ricardo_matos_campaneruti @whirlpool.com");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
enderecos.Add("[email protected]");
}// fim getEmails
void Spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
{
Spinner spinner = (Spinner)sender;
string toast = string.Format("Colaborador selecionado: {0}", spinner.GetItemAtPosition(e.Position));
Toast.MakeText(this, toast, ToastLength.Long).Show();
string texto = toast;
}
}
void enviar_Click(object sender, EventArgs e)
{ try {
RadioButton rdbgrupo1 = FindViewById<RadioButton>(rdgconquiste.CheckedRadioButtonId);
RadioButton rdbgrupo2 = FindViewById<RadioButton>(rdgcrie.CheckedRadioButtonId);
RadioButton rdbgrupo3 = FindViewById<RadioButton>(rdgviva.CheckedRadioButtonId);
RadioButton rdbgrupo4 = FindViewById<RadioButton>(rdgentregue.CheckedRadioButtonId);
if (rdbgrupo1.Selected == false || rdbgrupo2.Selected == false || rdbgrupo3.Selected == false || rdbgrupo4.Selected == false)
{
string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
Toast.MakeText(this, excecao, ToastLength.Long).Show();
}
else
{
String emailescolhido = spinner.SelectedItem.ToString();
String campocomentario = comentário.Text;
string message = "Ao menos um botão de cada campo deve ser selecionado";
Toast.MakeText(ApplicationContext, message, ToastLength.Long).Show();
var email = new Intent(Android.Content.Intent.ActionSend);
//send to
email.PutExtra(Android.Content.Intent.ExtraEmail,
new string[] { "" + emailescolhido });
//cc to
email.PutExtra(Android.Content.Intent.ExtraCc,
new string[] { "[email protected]" });
//subject
email.PutExtra(Android.Content.Intent.ExtraSubject, "SABIA QUE VOCÊ FOI RECONHECIDO?");
//content
email.PutExtra(Android.Content.Intent.ExtraText,
"Você foi reconhecido pelo(s) valor(es) de: " + rdbgrupo1.Text + " , " + rdbgrupo2.Text + " , " + rdbgrupo3.Text + " e " + rdbgrupo4.Text);
email.PutExtra(Android.Content.Intent.ExtraText, "" + campocomentario);
email.SetType("message/rfc822");
StartActivity(email);
}
}
catch (Java.Lang.Exception ex)
{
string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
Toast.MakeText(this, excecao, ToastLength.Long).Show();
}
}
}
}
答
如何显示异常消息,如果用户不检查Xamarin的Android单选按钮?
你可以使用radioGroup.CheckedRadioButtonId得到结果的RadioGroup
是否检查,在空选择,返回值为-1。
public int RadioGroupIsChecked(RadioGroup radioGroup)
{
//-1 means empty selection
return radioGroup.CheckedRadioButtonId;
}
//When user doesn't check a radio button, show a Toast
if (RadioGroupIsChecked(group) == -1 || RadioGroupIsChecked(group2) == -1 || RadioGroupIsChecked(group3) == -1 || RadioGroupIsChecked(group4) == -1)
{
string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
Toast.MakeText(this, excecao, ToastLength.Long).Show();
}
我怀疑你最好的方法是在列表中添加更多属性,过滤这些属性,然后检查每组按钮。另外我希望那些是虚拟的电子邮件,否则业主会希望他们删除。 – ti7
你是什么意思“我想以某种方式做到这一点,只要其中一个团队足够好”?你能否详细说明一下? –
而不是选择4个按钮(每个rdgroup的1个)我想让用户选择1个收音机组。现在,当我尝试这样做时,按钮会返回空白和应用程序中断的异常 –