xamarin android application

pamela rizk
pamela rizk used Ask the Experts™
on
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

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2016

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

Author

Commented:
ok how ?
Top Expert 2016

Commented:
where in your service do you have the toast.show?
Amazon Web Services

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

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:
thank you

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial