2017-10-17 79 views
0

嗨如果用戶沒有檢查單選按鈕,我需要在屏幕上顯示一條錯誤消息。在這個代碼中,有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(); 

      } 


     } 




    } 
} 

Screenshot

+0

我懷疑你最好的方法是在列表中添加更多屬性,過濾這些屬性,然後檢查每組按鈕。另外我希望那些是虛擬的電子郵件,否則業主會希望他們刪除。 – ti7

+0

你是什麼意思「我想以某種方式做到這一點,只要其中一個團隊足夠好」?你能否詳細說明一下? –

+0

而不是選擇4個按鈕(每個rdgroup的1個)我想讓用戶選擇1個收音機組。現在,當我嘗試這樣做時,按鈕會返回空白和應用程序中斷的異常 –

回答

1

如何顯示異常消息,如果用戶不檢查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(); 
} 
相關問題