如何在 Xamarin Android 中清除 EditText

Posted

技术标签:

【中文标题】如何在 Xamarin Android 中清除 EditText【英文标题】:How Clear EditText in Xamarin Android 【发布时间】:2019-07-25 12:40:20 【问题描述】:

单击按钮后,我想在 onfocus 时清除我的 EditText 字段。

此代码是一个短信应用程序,当我点击按钮发送以再次输入另一条消息后,当我专注于 EditText 字段时,我想清除 EditTExt 字段..

我尝试将 gotfocus 属性放在 axml 文件中,但它不起作用.. 我尝试在谷歌上搜索但找不到任何解决方案,其他程序员使用了 gotfocus 属性,但我认为 gotFocus 属性仅在 xaml 文件中可用,而不在 axml 中。

using android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using Android.Content.PM;
using Android.Telephony;
using System;
using Android;
using Android.Content;
using Android.Support.V4.Content;
using Android.Support.V4.App;
using Android.Util;
using Android.Support.Design.Widget;
using Android.Views;
using Android.Text;
using System.Threading;

namespace MhylesOrderingApp

    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity, ActivityCompat.IOnRequestPermissionsResultCallback
    
        static readonly int REQUEST_SENDSMS = 0;
        private SmsManager _smsManager;
        private BroadcastReceiver _smsSentBroadcastReceiver, _smsDeliveredBroadcastReceiver;
        View layout;
        //private ProgressBar spinner;
        static Android.App.ProgressDialog progress;
        //Android.App.ProgressDialog.progress;
        //public virtual ViewStates Visibility  get; set; 
        //SMSSentReceiver receiver;
        //private SmsManager smsManager;
        protected override void OnCreate(Bundle savedInstanceState)
        
            base.OnCreate(savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            layout = FindViewById(Resource.Id.sample_main_layout);



            //spinner = (ProgressBar)FindViewById(Resource.Id.progressBar1);
            var smsBtn = FindViewById<Button>(Resource.Id.btnSend);
            var phoneNum = FindViewById<EditText>(Resource.Id.phoneNum);
            var smsDate = "";
            var smsCustomer = FindViewById<EditText>(Resource.Id.txtCustomer);
            var smsAddress = FindViewById<EditText>(Resource.Id.txtAddress);
            var smsCustNo = FindViewById<EditText>(Resource.Id.txtCustomerNo);
            var smsOrderProd = FindViewById<EditText>(Resource.Id.txtOrderedProduct);
            var smsProdQty = FindViewById<EditText>(Resource.Id.txtProductQty);
            var smsUnit = FindViewById<EditText>(Resource.Id.txtUnit);
            var smsAgentName = FindViewById<EditText>(Resource.Id.txtAgentName);
            var scrollView = FindViewById<ScrollView>(Resource.Id.scrollViewing);


            DateTime now = DateTime.Now.ToLocalTime();
            smsDate = now.ToString();
            scrollView.SetBackgroundResource(Resource.Drawable.TextViewStyle);
            phoneNum.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsCustomer.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsAddress.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsCustNo.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsOrderProd.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsProdQty.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsUnit.SetBackgroundResource(Resource.Drawable.EditTextStyle);
            smsAgentName.SetBackgroundResource(Resource.Drawable.EditTextStyle);

            //spinner.Visibility = (ViewStates.Gone);
            progress = new Android.App.ProgressDialog(this);
            progress.Indeterminate = true;
            progress.SetProgressStyle(Android.App.ProgressDialogStyle.Spinner);
            progress.SetMessage("Sending.. Please wait!");
            progress.SetCancelable(false);
            _smsManager = SmsManager.Default;

            //receiver = new SMSSentReceiver();
            //smsManager = SmsManager.Default;
            //IntentFilter intentFilter = new IntentFilter("SMS_SENT");
            //intentFilter.AddAction("android.permission.SEND_SMS");

            ////RegisterReceiver(receiver, intentFilter);
            //smsBtn.Click += (s, e) =>
            //
            //    var phone = phoneNum.Text;
            //    var message = sms.Text;

            //    var piSent = PendingIntent.GetBroadcast(this, 0, new Android.Content.Intent("SMS_SENT"), 0);
            //    //var piDelivered = PendingIntent.GetBroadcast(this, 0, new Android.Content.Intent("SMS_DELIVERED"), 0);

            //    smsManager.SendTextMessage(phone, null, message, piSent, null);
            //;

            smsBtn.Click += (s, e) =>
            
                progress.Show();
                if (TextUtils.IsEmpty(smsDate) || TextUtils.IsEmpty(phoneNum.Text) || TextUtils.IsEmpty(smsCustomer.Text)
                    || TextUtils.IsEmpty(smsAddress.Text) || TextUtils.IsEmpty(smsCustNo.Text) || TextUtils.IsEmpty(smsOrderProd.Text)
                    || TextUtils.IsEmpty(smsProdQty.Text) || TextUtils.IsEmpty(smsUnit.Text) || TextUtils.IsEmpty(smsAgentName.Text))
                
                    new Thread(new ThreadStart(delegate
                    
                        RunOnUiThread(() => Toast.MakeText(this, "Please fill out all the fields", ToastLength.Long).Show());
                        RunOnUiThread(() => progress.Hide());
                    )).Start();
                    //Toast.MakeText(this, "Please fill out all the fields", ToastLength.Short).Show();
                    return;
                
                else
                
                    var phone = phoneNum.Text;
                    var message = smsDate + "|" + smsCustomer.Text + "|" + smsAddress.Text + "|" + smsCustNo.Text
                                  + "|" + smsOrderProd.Text + "|" + smsProdQty.Text + "|" + smsUnit.Text + "|" + smsAgentName.Text;

                    var piSent = PendingIntent.GetBroadcast(this, 0, new Intent("SMS_SENT"), 0);
                    var piDelivered = PendingIntent.GetBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);

                    if ((int)Build.VERSION.SdkInt < 23)
                    
                        //spinner.Visibility = (ViewStates.Visible);
                        _smsManager.SendTextMessage(phone, null, message, piSent, piDelivered);
                        new Thread(new ThreadStart(delegate
                        
                            RunOnUiThread(() => Toast.MakeText(this, "Sending Orders error! please restart the app", ToastLength.Long).Show());
                            RunOnUiThread(() => progress.Hide());
                        )).Start();
                        //Toast.MakeText(this, "Sending Orders error! please restart the app", ToastLength.Short).Show();
                        return;
                    
                    else
                    
                        if (ActivityCompat.CheckSelfPermission(this, Manifest.Permission.SendSms) != (int)Permission.Granted)
                        
                            // Permission is not granted. If necessary display rationale & request.
                            RequestSendSMSPermission();
                            //new Thread(new ThreadStart(delegate
                            //
                            //    //RequestSendSMSPermission();
                            //    RunOnUiThread(() => progress.Hide());
                            //)).Start();
                        
                        else
                        
                            // We have permission, go ahead and send SMS.
                            //spinner.Visibility = (ViewStates.Visible);
                            _smsManager.SendTextMessage(phone, null, message, piSent, piDelivered);
                            //new Thread(new ThreadStart(delegate
                            //
                            //    //_smsManager.SendTextMessage(phone, null, message, piSent, piDelivered);
                            //    RunOnUiThread(() => progress.Hide());
                            //)).Start();

                        
                    


                

                //_smsManager.SendTextMessage(phone, null, message, piSent, piDelivered);
            ;

        
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        
        public void RequestSendSMSPermission()
        
            Log.Info("MainActivity", "Message permission has NOT been granted. Requesting permission.");
            if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.SendSms))
            
                Log.Info("MainActivity", "Displaying message permission rationale to provide additional context.");
                Snackbar.Make(layout, "Message permission is needed to send SMS.",
                    Snackbar.LengthIndefinite).SetAction("OK", new Action<View>(delegate (View obj) 
                        ActivityCompat.RequestPermissions(this, new String[]  Manifest.Permission.SendSms , REQUEST_SENDSMS);
                    )).Show();
            
            else
            
                ActivityCompat.RequestPermissions(this, new String[]  Manifest.Permission.SendSms , REQUEST_SENDSMS);
            
        
        //protected override void OnPause()
        //
        //    base.OnPause();
        //    UnregisterReceiver(receiver);
        //
        protected override void OnResume()
        

            //spinner.Visibility = (ViewStates.Gone);
            base.OnResume();
            //spinner.setVisibility(View.GONE);

            _smsSentBroadcastReceiver = new SMSSentReceiver();
            _smsDeliveredBroadcastReceiver = new SMSDeliveredReceiver();

            RegisterReceiver(_smsSentBroadcastReceiver, new IntentFilter("SMS_SENT"));
            RegisterReceiver(_smsDeliveredBroadcastReceiver, new IntentFilter("SMS_DELIVERED"));
            //spinner.setVisibility(View.GONE);
        

        protected override void OnPause()
        
            base.OnPause();

            UnregisterReceiver(_smsSentBroadcastReceiver);
            UnregisterReceiver(_smsDeliveredBroadcastReceiver);
        
        //[BroadcastReceiver(Exported = true, Permission = "//receiver/@android:android.permission.SEND_SMS")]
        [BroadcastReceiver]
        public class SMSSentReceiver : BroadcastReceiver
        
            public override void OnReceive(Context context, Intent intent)
            
                switch ((int)ResultCode)
                
                    case (int)Result.Ok:
                        Toast.MakeText(Application.Context, "SMS has been sent", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    case (int)SmsResultError.GenericFailure:
                        Toast.MakeText(Application.Context, "Generic Failure", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    case (int)SmsResultError.NoService:
                        Toast.MakeText(Application.Context, "No Service", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    case (int)SmsResultError.NullPdu:
                        Toast.MakeText(Application.Context, "Null PDU", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    case (int)SmsResultError.RadioOff:
                        Toast.MakeText(Application.Context, "Radio Off", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    default:
                        break;
                
            

        
        //[BroadcastReceiver(Exported = true, Permission = "//receiver/@android:android.permission.SEND_SMS")]
        [BroadcastReceiver]
        public class SMSDeliveredReceiver : BroadcastReceiver
        
            public override void OnReceive(Context context, Intent intent)
            
                switch ((int)ResultCode)
                
                    case (int)Result.Ok:
                        Toast.MakeText(Application.Context, "SMS Delivered", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                    case (int)Result.Canceled:
                        Toast.MakeText(Application.Context, "SMS not delivered", ToastLength.Short).Show();
                        progress.Hide();
                        break;
                
            
        
    

【问题讨论】:

如果不显示一些代码,就很难看出问题出在哪里。请将其添加到帖子中。 抱歉没有发布我的代码 @MarkusDeibel 先生。 这可能会帮助你***.com/a/48596962/2137237 【参考方案1】:

你不能把 EditText 文本字段设置为 "" 吗?

像这样:

 editText.Text = "";

【讨论】:

以上是关于如何在 Xamarin Android 中清除 EditText的主要内容,如果未能解决你的问题,请参考以下文章

关闭应用程序时清除 Xamarin 表单 WebView cookie

Xamarin 表单:如何从 ios 捆绑签名中清除旧的分发证书和配置文件?

如何清除导航堆栈?

如何在 Xamarin.android 中更改条目光标颜色

更新 Listview itemsource 在 Xamarin 表单中清除其中的单选按钮控件

Xamarin 是不是支持 Xamarin Android 绑定库中的 Kotlin 协程?