Just to get the answer on the mailing list:

        http://stackoverflow.com/a/8221373/83444

On Nov 21, 2011, at 1:51 PM, Paul F. Johnson wrote:
> I have a standard winform which looks like this (in part)
> 
> namespace marker
> {     
>  public class xmlhandler : Form, Isettings
>  {
>               public xmlhandler(common data)
>               {
...

> where common is just a class containing a pile of variables.
> 
> Is this possible to do within the mono for android framework (with the 
> exception of finding the path) and if it is, how is it done?

Can you provide an `Activity` constructor which takes parameters? Yes. Would it 
be at all helpful? No, because Activities are started through 
Context.StartActivity() [0], which provides no mechanism to invoke a 
non-default constructor.

The "Android Way" to transfer data between Activities is to use the Intent 
"extras" mechanism, e.g. Intent.PutExtra(string,string) [1] and 
Intent.GetStringExtra(string) [2], which introduces it's own set of problems:

1. Intents are also an IPC mechanism (as an Activity may actually reside in 
another process -- this is by design), so you're restricted to types which can 
be marshaled across process boundaries.
2. `String`s, `int`s, and other builtin types are supported, but aren't exactly 
"high level" objects.
3. "Higher level" objects are supported through the android.os.Parcelable [3] 
interface, but (a) it has a "marshal by value" semantics, so isn't useful for 
sharing read+write data between activities, and (b) Mono for Android doesn't 
currently support implementing this interface [4].

So how do you share data between Activities? By punting.

* Place the data onto an Application[5] subclass. This will be accessible via 
the Context.ApplicationContext [6] property, and can store process-global state.

* Use some other `public static` field within your process to contain the 
shared information.

* Provide a ContentProvider [7] implementation which will store and provide the 
desired data when prompted.

* Sqlite?

* Serialize to a string and transfer the sring

* etc.

The launched activity can then use the Bundle parameter passed to OnCreate() to 
extract the Intent data.

 - Jon

[0] 
http://androidapi.xamarin.com/?link=M%3aAndroid.Content.Context.StartActivity(Android.Content.Intent)

[1] 
http://androidapi.xamarin.com/?link=M%3aAndroid.Content.Intent.PutExtra(System.String%2cSystem.String)

[2] 
http://androidapi.xamarin.com/?link=M%3aAndroid.Content.Intent.GetStringExtra(System.String)

[3] http://developer.android.com/reference/android/os/Parcelable.html

[4] http://docs.xamarin.com/android/about/limitations

[5] http://androidapi.xamarin.com/index.aspx?link=T:Android.App.Application

[6] 
http://androidapi.xamarin.com/?link=P:Android.Content.Context.ApplicationContext

[7] http://androidapi.xamarin.com/?link=T:Android.Content.ContentProvider
_______________________________________________
Monodroid mailing list
[email protected]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to