/// <summary> /// Wires a control to a property. /// This should be called in the Fragment's OnCreateView, with the newly inflated layout. /// </summary> /// <param name="fragment">The fragment.</param> /// <param name="inflatedView">The inflated view.</param> /// <param name="resolveMembers">The resolve members.</param> public static void WireUpControls(this Fragment fragment, View inflatedView, ResolveStrategy resolveMembers = ResolveStrategy.Implicit) { if (fragment == null) { throw new ArgumentNullException(nameof(fragment)); } var members = fragment.GetWireUpMembers(resolveMembers); foreach (var member in members) { try { // Find the android control with the same name from the view var view = inflatedView.GetControl(fragment.GetType().Assembly, member.GetResourceName()); // Set the activity field's value to the view with that identifier member.SetValue(fragment, view); } catch (Exception ex) { throw new MissingFieldException("Failed to wire up the Property " + member.Name + " to a View in your layout with a corresponding identifier", ex); } } }
/// <summary> /// A helper method to automatically resolve properties in an <see cref="Android.Support.V4.App.Fragment"/> to their respective elements in the layout. /// This should be called in the Fragement's OnCreateView, with the newly inflated layout. /// </summary> /// <param name="this">The fragment.</param> /// <param name="inflatedView">The newly inflated <see cref="View"/> returned from Inflate.</param> /// <param name="resolveMembers">The strategy used to resolve properties that either subclass <see cref="View"/>, have a <see cref="WireUpResourceAttribute"/> or have a <see cref="IgnoreResourceAttribute"/>.</param> public static void WireUpControls(this Android.Support.V4.App.Fragment @this, View inflatedView, ResolveStrategy resolveMembers = ResolveStrategy.Implicit) { var members = @this.GetWireUpMembers(resolveMembers); members.ToList().ForEach(m => { try { // Find the android control with the same name from the view var view = inflatedView.GetControlInternal(m.PropertyType, m.GetResourceName()); // Set the activity field's value to the view with that identifier m.SetValue(@this, view); } catch (Exception ex) { throw new MissingFieldException( "Failed to wire up the Property " + m.Name + " to a View in your layout with a corresponding identifier", ex); } }); }