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