To Xamarin with Love

3 min read 556 words

Xamarin Evolve just concluded. And there no best time to write this post. And for the fact I am not writing anything new or even anything related to announcements that happened there. I am writing this because recently I got chance to work with android using Java. And experience was not at all good. And reason is not so surprisingly Java.

I am will not explain anything instead I just copy paste three code snippets. All are doing same thing but they are all in different languages. Now, for the people who think that language doesn't make any difference; this post is for them. Here I am not including any frameworks like Reactive UI or Xamarin.Forms. If I include them then this competition will be one sided. (Xamarin Sided)

Code Snippet in Java public class MainActivity extends Activity { int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setEvents(); } private void setEvents() { final Button mybutton = (Button) this.findViewById(R.id.myButton); mybutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mybutton.setText(String.valueOf(count)); } }); final TextView seekbarView = (TextView) this.findViewById(R.id.seekbarTextView); SeekBar seekbar = (SeekBar) this.findViewById(R.id.seekBar1); seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { int progresssed = 0; @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub seekbarView.setText(String.valueOf(progresssed)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub progresssed = progress; } }); CheckBox checkbox = (CheckBox) this.findViewById(R.id.checkBox1); checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub Log.i("info","Checkbox is " + String.valueOf(isChecked)); } }); } }

Code Snippet in C#

[Activity (Label = "XamarinBlog", MainLauncher = true, Icon = "@drawable/icon")]
	public class MainActivity : Activity
	{
		int count = 1;

		protected override void OnCreate (Bundle bundle)
		{
			base.OnCreate (bundle);

			// Set our view from the "main" layout resource
			SetContentView (Resource.Layout.Main);
			var button = this.FindViewById<Button> (Resource.Id.myButton);
			button.Click += (sender, e) => {
				button.Text = String.Format("{0} clicks",count);
				count++;
			};

			var seekbarTextView = this.FindViewById<TextView> (Resource.Id.seekbarTextView);
			var seekbar = this.FindViewById<SeekBar> (Resource.Id.seekBar1);
			seekbar.ProgressChanged += (sender, e) => {
				seekbarTextView.Text = String.Format("The value of seekbar is {0}", e.Progress);
			};

			var checkbox = this.FindViewById<CheckBox> (Resource.Id.checkBox1);

			checkbox.CheckedChange += (sender, e) => {
				Console.WriteLine("Checked changed!");
			};
		}
	}

Code Snippet in F#

[<Activity(Label = "XamarinBlog", MainLauncher = true)>]
type MainActivity() = 
    inherit Activity()
    let mutable count : int = 1
    override this.OnCreate(bundle) = 
        base.OnCreate(bundle)
        // Set our view from the "main" layout resource
        this.SetContentView(Resource_Layout.Main)
        // Get our button from the layout resource, and attach an event to it
        let button = this.FindViewById<Button>(Resource_Id.myButton)
        button.Click.Add(fun args -> 
            button.Text <- sprintf "%d clicks!" count
            count <- count + 1)
        let seekbarTextView = this.FindViewById<TextView>(Resource_Id.seekbarTextView)
        let seekbar = this.FindViewById<SeekBar>(Resource_Id.seekBar1)
        seekbar.ProgressChanged.Add
            (fun args -> seekbarTextView.Text <- sprintf "The value of seekbar is %A" args.Progress)

        let checkbox = this.FindViewById<CheckBox>(Resource_Id.checkBox1)
        checkbox.CheckedChange.Add(fun args -> printfn "Check changed")

Hope you can see what I am trying to say here. I can become a good typist by writing code in Java but defiantly not good programmer. I don't know from which planet Java has incorporated it's Object Oriented model.

Xamarin is solving many problems by supporting C# and F# for android development.

<3<3<3 Xamarin

You can also compare code between C# and F# but don't tell anyone as right now I am bashing Java in this post. :P

Share this article