Avatar of pamela rizk
pamela rizk
Flag for Lebanon asked on

xamarin android application

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?
MobileAndroid

Avatar of undefined
Last Comment
pamela rizk

8/22/2022 - Mon
David Johnson, CD

only the service can hide the toast since it resides outside of your application
pamela rizk

ASKER
ok how ?
David Johnson, CD

where in your service do you have the toast.show?
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
pamela rizk

ASKER
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 rizk

ASKER
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
ASKER CERTIFIED SOLUTION
pamela rizk

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question