We help IT Professionals succeed at work.

xamarin android application

pamela rizk
pamela rizk asked
on
115 Views
Last Modified: 2018-11-26
hi

i have a xamarin application where in an activity and upon a click i am running a background service to load data into mobile application  where inside the service toast are shown
now when data is downloaded in the service
i need to hide the toast.
is there anyway to do it?
Comment
Watch Question

David Johnson, CDSimple Geek from the '70s
CERTIFIED EXPERT
Distinguished Expert 2019

Commented:
only the service can hide the toast since it resides outside of your application
pamela rizkDeveloper

Author

Commented:
ok how ?
David Johnson, CDSimple Geek from the '70s
CERTIFIED EXPERT
Distinguished Expert 2019

Commented:
where in your service do you have the toast.show?
pamela rizkDeveloper

Author

Commented:
dear All

here are some details that might help you solving my problem:
private async Task PullAllDataFunction(Message msg, Context _Context)
            {
                
               ShowMessage(_Context, _Context.GetString(Resource.String.downloading_Items));
                await PullData.GetInstance().FetchITemsDataAsync();
				ShowMessage(_Context, _Context.GetString(Resource.String.Customers));
                await PullData.GetInstance().FetchCustomersDataAsync();
              CompletedSelfResult(_Context, msg.Arg1); //here a message that downloading data has been completed
            }

			show message function:
			 private void ShowMessage(Context _Context, string m_Message)
            {
              var m_thread = new Java.Lang.Thread(() =>
                     {
                         Task.Run(() =>
                         {
                             try
                             {
                                 Toast.MakeText(outerInstance, m_Message, ToastLength.Long).Show();
                             }
                             catch
                             {
                                 ToastUtils.ShowMessage(_Context, m_Message);
                             }
                         }).ConfigureAwait(false);//ConfigureAwait is used to avoid deadlocks
                     });
                m_thread.Start();
                
                //

            }

			   public class ToastUtils
        {
            static Toast toast = null;

            public static void ShowMessage(Context context, System.String m_Message)
            {
                try
                {
                    DisplayMessage(context, m_Message);
                }
                catch (System.Exception ex)
                {
                    Log.Debug(TAG, ex.ToString());
                }
            }
            public static void DisplayMessage(Context context, System.String m_Message)
            {
                try
                {
                    if (toast != null)
                    {
                        toast.SetText(m_Message);
                    }
                    else
                    {
                        Toast.MakeText(context, m_Message, ToastLength.Long).Show();
                    }
                    toast.Show();
                    
                }
                catch
                {
                    Looper.Prepare();//checks if there is no Looper already attached to our Thread (remember, only one Looper per Thread) and then creating and attaching a Looper.
                    Toast.MakeText(context, m_Message, ToastLength.Long).Show();
                    Looper.Loop();//cause our Looper to start looping.
                   

                }
            }
        }

Open in new window


i realize that data is completed but message of show customers is showing before message of items
that is why i need when data is downloaded to hide all toast in teh service how can i do that ?

Please advice.
pamela rizkDeveloper

Author

Commented:
this issue has been fixed as below:
     public class ToastUtils
        {
            static Toast toast = null;
            public static void ShowMessage(Context context, System.String m_Message)
            {


                try
                {
                    DisplayMessage(context, m_Message);
                    ClearMessage(context, m_Message);
                }
                catch (System.Exception ex)
                {
                    Log.Debug(TAG, ex.ToString());
                }
            }
            public static void ClearMessage(Context context, System.String m_Message)
            {
                toast.SetText(m_Message);
                toast.Cancel();
            }
            public static void DisplayMessage(Context context, System.String m_Message)
            {

                try
                {
                    toast = Toast.MakeText(context, m_Message, ToastLength.Long);
                    toast.Show();

                }
                catch
                {
                    Looper.Prepare();//checks if there is no Looper already attached to our Thread (remember, only one Looper per Thread) and then creating and attaching a Looper.
                    toast = Toast.MakeText(context, m_Message, ToastLength.Long);
                    toast.Show();
                    Looper.Loop();//cause our Looper to start looping.
                }

            }
        }

Open in new window


i am calling showmessage method that display a message then hide it
so in my case if i need to show a toast loading customer , loading items
loading customer will be shown then it will be hide and load items will be shown ..

thank you
Developer
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.