Avatar of pamela rizk
pamela rizkFlag 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
Avatar of David Johnson, CD
David Johnson, CD
Flag of Canada image

only the service can hide the toast since it resides outside of your application
Avatar of pamela rizk
pamela rizk
Flag of Lebanon image

ASKER

ok how ?
where in your service do you have the toast.show?
Avatar of pamela rizk
pamela rizk
Flag of Lebanon image

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.
Avatar of pamela rizk
pamela rizk
Flag of Lebanon image

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
Avatar of pamela rizk
pamela rizk
Flag of Lebanon image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Android
Android

Android is a mobile operating system developed by Google, based on the Linux kernel and designed primarily for touchscreen mobile devices such as smartphones and tablets. Android's user interface is based on direct manipulation, using touch gestures that loosely correspond to real-world actions, such as swiping, tapping and pinching, to manipulate on-screen objects, along with a virtual keyboard for text input. In addition to touchscreen devices, variants of Android are also used on notebooks, game consoles, digital cameras, televisions, automobiles and other electronics. Applications are usually developed in Java programming language using the Android software development kit (SDK), but other development environments are also available, including Delphi, Ruby and Visual Studio (using C++).

7K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo