To Xamarin with Love
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