Tuesday, August 26, 2014

How to stop double tap or multi tap problem in android Xamarin

It is a common problem for android or any mobile developer, to stop unwanted multi tap in a button or view. This may cause blockers and crashes also. So, it’s a kind of serious and common issue. To fix this there are multiple solutions you can approach to. You can use timer or you can track down view event or even you can use a flag also. But again you have to change the flag after the button click occurrence. You can assign a different handler after first click. But also again you have to assign the real handler after the click occurs. All these may not give you 100% solution; as well it can be another piece of code for a new error.
Here I found a solution which may solve this issue in much secure and smart way.

Note: Same idea will work for Android Java developers.

Let get in to it-

Step 1: Create SingleClickListener class, with following code.

public  class SingleClickListener
        public SingleClickListener(Action<object, EventArgs> setOnClick)
            _setOnClick = setOnClick;
        private bool hasClicked;

        private Action<object, EventArgs> _setOnClick;

        public void OnClick(object v, EventArgs e)
            if (!hasClicked)
                _setOnClick(v, e);
                hasClicked = true;
        private void reset()
            Android.OS.Handler mHandler = new Android.OS.Handler();
            mHandler.PostDelayed(new Action(() => { hasClicked = false; }), 500);

Step2: Use it everywhere you need it, in following way-

Button myButton= FindViewById<Button> (Resource.Id.myButton);
myButton.Click += new SingleClickListener( myButtonClickEvent).OnClick;
void myButtonClickEvent (object sender, EventArgs e)
//your button click code goes here.

That’s it. :)

Friday, August 22, 2014

Android app development start up with Xamarin + C#

When I get to know the about Xamarin , following questions are popping up in my mind. I believe, right now in your mind, same questions are floating in gray cell area. Let’s try to have a brief over view.

Android app development industry is booming now. That means the market requirement is getting very high. When a development industry grows, it needs more developer. To fill the gap experienced developer need to shift their technical domain. It’s a very challenging situation when a set of developer need to develop a new skill quick and do it efficiently. After working years with a development environment and language, it takes some time span to do the shift. As an example, when a c# developer need to shift from c# and visual studio to Eclipse and java for android development , it is definitely not a smooth transition for them and also require some time. Xamarin is basically is the answer to it.

How it is helpful?
Xamarin provides a development environment which is just same as c# development environment for android app development. Not only android but also iPhone, and windows app can be developed using Xamarin. And the best thing is reusable code. The same code can be used in iPhone, android, windows phone, as we are using Xamarin.
Basically normal c# code is running on its own Mono (.net) framework on the top of android os and talking with hardware. Mono framework officially release in 2004 for linux. Mono is nothing but .net for the environment other than windows.
Java libraries or existing code also can be imported using c# binding. It is really awesome to have this feature. We can use any existing java library created for Android native environment.  Java code will be wrapped by c# code to use in c# Xamarin development. To build android app, we may need access to java widget and sdk. We can expose those using bindings. It will expose any java class or library as per needed. We can use these classes in c# code just as in c# itself. Awesome. J

How it works?
It acts like almost desktop app development for c#.  The compiler is producing IL (Intermediate Language), then package that IL in apk. The apk is running on top of .net mono framework which runs over Andrid os. There is no java involvement in deployment. It runs over Mono and Delvik runtime, which runs parallel in android os. Other things like- view, resources, manifest are maintained as in android native development. These are the simple self explanatory xml files. I will not talk about android development here. Please refer to android development tutorial blogs- http://www.xoriant.com/blog/?s=android+basics

Ok, enough. Now give it a try.

Setting up development environment
Download latest Xamarin from http://xamarin.com and install it.  After you finish, you will get free GUI xamarin studio and visual studio integrated development environment. You can use any of them. Xamarin studio is free, almost feels like visual studio and has intellisense also. If you have visual studio licence, you can use visual studio flawlessly. To run & test the app in simulator you need to use ADT. You can create a virtual device using Android virtual device manager. But it is slower than you can imagine. You can also use third parties, like- Genymotion (faster, but not freeL )

Let’s create a project using following instruction-

Open Xamarin studio.

Fellow these steps: File -> New -> Solution
Select Android Application as shown bellow. Provide suitable name to the project and path to save.


After saving project, you will get a first view of code, which is basically associated with the views

in xml in “resource/layout” folder. It (MainActivity.cs) is inherited from activity which acts like view controller, just as in android. 
Now as you can see, the code is pretty simple. It is basically associating a click event to a button on view creation time, and printing the number of clicks on the button itself. Run the above code by clicking Run (>) button to see the actual effect on simulator. 

The stage is set for you to play around.  

So you are ready to go further. Create your own native apps using Xamarin.

Further study & ref: 
·         http://api.xamarin.com/
·         http://developer.xamarin.com/samples/android/all/
·         http://www.genymotion.com/