ãœãããŠã§ã¢ã®æ»ããã¿ã³ã¯ãããŒããŠã§ã¢ã®æ»ããã¿ã³ãšåãã³ãŒããã¹ã䜿çšããŸããã ããã«ãããAndroidïŒããã³ç§ãèªãã iOSïŒã§äºæããªãåäœãçºçããŸãã
ãOnBackButtonPressedïŒïŒãã¡ãœããã¯ãããŒããŠã§ã¢ã®ãæ»ãããã¿ã³ãæŒããããšããšåãããã«åŒã³åºãå¿ èŠããããŸãã
ã¡ãœããã¯åŒã³åºãããŸããã
NETStandard.Library {2.0.1} SQLite.Net.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Helpdesk
NETStandard.Library {2.0.1} Adapt.Model.Helpdesk
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.Model.Helpdesk
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Standard
System.Reflection.TypeExtensions {4.4.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Standard
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Model.Common.Standard
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Presentation.Standard
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Standard
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Database.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Database.Standard
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Model.Whakatane
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Business.Standard
Microsoft.CSharp {4.4.1} Adapt.Business.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Data.Generic.Standard
NETStandard.Library {2.0.1} Adapt.Data.Generic.Standard
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.Data.Generic.Standard
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.XamarinForms
NETStandard.Library {2.0.1} Adapt.Presentation.XamarinForms
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.XamarinForms
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.XamarinForms
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.C ... {1.0.1} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.R ... {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Support.Animated ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Media.Co ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.AppCo ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Media ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Recyc ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Vector.D ... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.iOS
Microsoft.NETCore.UniversalWindo ... {6.0.7} Adapt.Presentation.UWP
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.UWP
Esri.ArcGISRuntime.Xamarin.Android {100.2.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.Android
Microsoft.NETCore.Platforms {2.0.1} Adapt.Presentation.Xivic.Android
NETStandard.Library {2.0.1} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid.An ... {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericText ... {15.4.0.20} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.C ... {1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.R ... {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Animated ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Media.Co ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.AppCo ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Media ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Recyc ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Vector.D ... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Build.Download {0.4.7} Adapt.Presentation.Xivic.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Base {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Basement {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Maps {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Tasks {60.1142.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.Xamarin.iOS {100.2.0} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.iOS
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.UWP {100.2.0} Adapt.Presentation.Xivic.UWP
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.UWP
Microsoft.NETCore.UniversalWindo ... {6.0.7} Adapt.Presentation.Xivic.UWP
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.UWP
System.Runtime.Serialization.Pri ... {4.3.0} Adapt.Presentation.Xivic.UWP
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.UWP
æ±ããããå Žåã«æäŸããŸãã
ããã§ãåæ§ã®è°è«ããããŸããã ããã¯ããªããæ¢ããŠãããã®ã§ããïŒ https://forums.xamarin.com/discussion/100287/allow-a-single-place-to-handle-back-button-requests-with-async-support
@samhoutsãããããã¯ãŸãã«ç§ãã¡ã®åé¡ã§ãã åè¿°ã®ã³ãŒã«ããã¯ãã³ãŒãããŒã¹ã«è¿œå ããããæ¢åã®ã¡ãœãããæ¡åŒµããŠããœãããŠã§ã¢ã®[æ»ã]ãã¿ã³ããã®ã€ãã³ããå«ããå¿ èŠããããŸãã
@samhoutsãã®ãã°ã¯ãŸã åãå ¥ããããŠããŸããïŒ ããã¯å€§ããªåé¡ã§ãã ããã«ã©ã®ãããªæ å ±ãå¿ èŠã§ããïŒ
OnBackButtonPressedãããŒãããã¯ãã¿ã³ãšãœãããŠã§ã¢ããã¯ãã¿ã³ã®äž¡æ¹ãåŠçããå¿ èŠããããšããç¹ã§åæããŸãã ããã«ããããããããããã®äž¡æ¹ãååããããšã¯ããã»ã©é£ããããšã§ã¯ãããŸããã ç§ã¯ããã§ãã®ãããã¯ã«ã€ããŠããã°ãæžããŸããïŒ https ïŒ
@MSiccDevãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠæ瀺ãããåé¡ãåé¿ãç¶ãããšãä¿®æ£ãããããšã¯ãªãããã¯ãããžãŒããªããªããŸã§ã人ã ã¯ãããäœåºŠãäœåºŠã
@AceCoderLauraã¯äžæ¹ã®åŽã§çã§ãã å察åŽã§ã¯ãåé²ããªããã°ãªããŸããã æåã®æ¹æ³ã¯ãåé¿ããããšã§ãããåé¡ãå ±åããããšã§ãã
ãããã®åé¿çã¯ãã«ãŒãããŒãžã®ãã³ããŒã¬ãŒã¡ãã¥ãŒãå£ããŸã...
-.-
@AceCoderLauraMDããŒãžã®ããã¢ããªã®1ã€ã§åé¡ãªã䜿çšããŠããŸã...
@MSiccDev
ãããç§ã®ããããŒãªåé¿çã§ãïŒ
public override bool OnOptionsItemSelected(IMenuItem item)
{
//If it's not the "home" button continue as usual
var androidHomeId = 16908332;
if (item.ItemId != Resource.Id.home && item.ItemId != androidHomeId) return base.OnOptionsItemSelected(item);
var navigation = App.MainMasterDetailPage.Detail.Navigation;
if (navigation.NavigationStack.Count > 1)
{
//We can go back, do the arrow functionality
this.OnBackPressed();
return true;
}
else
{
//We're at the root, do the hamburger functionality
return App.MainMasterDetailPage.IsPresented = true;
}
}
@AceCoderLauraããã²ãŒã·ã§ã³ã«æ»ããã¿ã³ãã¯ãªãã¯ããåŸã«OnOptionsItemSelectedãããªã¬ãŒãããŸããoOç§ã®å Žåãäœãèµ·ãããŸãã...ïŒAndroidïŒ
ãã®åé¡ã«é²å±ã¯ãããŸããïŒ è€æ°ã®ãã¹ããããããã²ãŒã·ã§ã³ãã¥ãŒããããã¢ããªã±ãŒã·ã§ã³ã§ããã«ããããé©çšããã®ã¯éåžžã«é£ããã§ãããã @AceCoderLauraã«åæããŸããããã«ã¯ãxamarinã«ããããããé©çšããå¿ èŠããããŸãã
åãåé¡ã ãšã³ã¿ãŒãã©ã€ãºã¢ããªã§ããã¯ã€ãã³ããåŠçããããšã¯éåžžã«äžè¬çã ãšæããŸãã ã§ããã ãæ©ãä¿®æ£ããå¿ èŠããããŸãã
ãããä¿®æ£ããŠãã ããã1幎è¿ãå ±åãããŠããŸããããŸã æã£ãŠããªãã®ã¯ã°ãããŠããŸãã
@ddobrev確ãã«ãããã¯éåžžã«äŸ¿å©ãªæ©èœã§ãããæ®å¿µãªãããã©ã®ããã«æ©èœããå¿ èŠãããããæ確ã«å®çŸ©ãããŠããŸããã 誰ããããã«ã€ããŠèšåããŸããããå¿çããããŸããã§ããïŒ
ãããããã¯ãŸãã«ç§ãã¡ã®åé¡ã§ãã åè¿°ã®ã³ãŒã«ããã¯ãã³ãŒãããŒã¹ã«è¿œå ããããæ¢åã®ã¡ãœãããæ¡åŒµããŠããœãããŠã§ã¢ã®[æ»ã]ãã¿ã³ããã®ã€ãã³ããå«ããå¿ èŠããããŸãã
ãããæ確ã«å®çŸ©ãããŠããã°ãç§ã¯ãããå®è£ ããããã®PRãäœæããããšããŸããã
çç±ã¯ããããŸããããç§ã®å ŽåïŒAndroidã®å ŽåïŒã¯ãããMainActivityã«è¿œå ããã®ã«ååã§ãã
protected override void OnPostCreate(Bundle savedInstanceState)
{
var toolBar = FindViewById<global::Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolBar);
base.OnPostCreate(savedInstanceState);
}
ããã«ãããããã²ãŒã·ã§ã³ããŒã®ããŒããŠã§ã¢ã®æ»ããã¿ã³ãšãœãããŠã§ã¢ã®æ»ããã¿ã³ã®äž¡æ¹ãæŒããŠããOnBackButtonPressedãèµ·åãããŸãã ããããç§ã¯ãã®çç±ãããããŸããã
iOSã§ã¯ãã«ã¹ã¿ã ããŒãžã¬ã³ãã©ãŒã䜿çšããŠèªåã§è¿œå ããå¿ èŠããããŸããã
ããã§ãããã¯3.6.0ã§ä¿®æ£ãããäºå®ã§ããïŒ
誀ã£ãŠé²è¡äžã«ç§»åãããšæããŸãã
@samhoutsãªã®ã§ãä»ããä»æ§ãå¿ èŠã§ããïŒ ããã«ã€ããŠäœãæå®ãããŠããŸãããïŒ
@ddobrevãŸã ã人ã ãæããã®ãå ¬éããããã®æè¯ã®æ¹æ³ã
ä»ã®ãšããããœãããŠã§ã¢ã®æ»ãç¢å°ããã®æ¹æ³ã«çµã³ä»ããã ãã§ããããã¯ã®ããã«èŠããæè¯ã®è§£æ±ºçãæäŸããŸã
ããšãã°ãOnBackButtonPressedãéæšå¥šã«ããŠäœæããã ãã§ã
OnHardwareBackButtonPressedããã³OnNavigatingBack
ãŸããã©ã¡ãã®æ¹æ³ã§ãæ§ããŸããã æ©ããããã ããã¯ååã«é·ãã§ãã
ããŒãžæ©èœãšããŠããã®ãããªãã®ã¯æå³ããããŸããïŒ ãªããŒã¹ããã²ãŒã·ã§ã³ã芳å¯ããŠãã£ã³ã»ã«ã§ããã°ãéåžžã«åœ¹ç«ã¡ãŸãïŒãããã£ãŠãã¿ã¹ã¯\ ç§ãèŠãããšãã§ãã2çªç®ã®å®è¡å¯èœãªãªãã·ã§ã³ã¯ãããã ç·šéïŒ APIããããã«å€æŽããŸããenum ReverseNavigationSourceType {
Unspecified,
HwButton,
Navbar,
Gesture
}
class ReverseNavigationEventArgs {
public ReverseNavigationSourceType SourceType { get; }
public object Source { get; }
}
class Page {
public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) {
return Task.FromResult(true);
}
}
INavigation
ã€ã³ã¿ãŒãã§ãŒã¹ã®äžéšãšããŠå®è£
ããããšã§ãã
@pikauspãœãªã¥ãŒã·ã§ã³ã¯ç§ã«ãšã£ãŠæé«ã®ããã«èŠããŸã
ãŸãããããããã«åºããŠãããŒãžç¶æ ãã«äŒŒããã®ãå°å ¥ããŠããã ããã°ãšæããŸãã
ããŒãžã¯ã¢ã¯ãã£ããŸãã¯éã¢ã¯ãã£ãã«ããããšãã§ããŸãã
class PageActivationEventArgs { }
class PageDeactivationEventArgs {
public bool IsPermanent { get; }
}
class Page {
public virtual Task OnActivating(PageActivationEventArgs) {
return Task.CompletedTask;
}
public virtual Task<bool> OnDeactivating(PageDeactivationEventArgs) {
return Task.FromResult(true);
}
}
ããŒãžãOnDeactivating
ããé¢ããŠããã²ãŒãããããšãåŒã³åºãããŸãã IsPermanent
ã®å€ã¯ãããŒãžãããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã«ä¿æãããŠãããã©ããã«åºã¥ããŠããŸãïŒãããã®å Žåã¯trueãããã·ã¥ã®å Žåã¯falseïŒã
ããã²ãŒã·ã§ã³ãå®äºãããšåŒã³åºãããOnActivated
ãšOnDeactivated
ãå°å
¥ããå¯èœæ§ããããŸãã
ããã«ãããéçºè ã¯ããã²ãŒã·ã§ã³ãããŒã«å€§ããªåãäžããããšãã§ããŸãã
ããªãã®èãã¯äœã§ããïŒ
ããã§é²æç¶æ³ãå ±åããŠããã ããŸãããã
åªå
床ãäžããæ¹æ³ã¯ãããŸããïŒ
ç§ã¯äœå¹Žãã®éåé¿çãæã£ãŠããŸããããããã¯æã
ããããŸããããªãããšããããŸãã...
ç§ã®çŸåšã®åé¿çããäžå©ãªç¹ãããéåžžã«æªãããã¯ã§ããã«ã¹ã¿ã ããã²ãŒã·ã§ã³ããŒãžã¬ã³ãã©ãŒãå®å
šã«åé€ããããã»ã¹ã®ããã€ãã®åé¡ãä¿®æ£ããããšèããŠããŸãã
ãã³ã
ãœããæ»ããã¿ã³ã®ã€ã³ã¿ãŒã»ããã«é¢ããæŽæ°ã ç§ãã¡ã¯ããã«æ¬åœã«èŠåŽããŠããŸãã ãã®æçš¿ã§èšåãããŠãã解決çã¯ç§ãã¡ã®ããã«æ©èœããŸããã
ããã¯æ¬åœã«å¿ èŠã§ãã ç¬èªã®ããŒã«ããŒããããã³ã°ãŸãã¯å®è£ ããå¿ èŠãããããšã¯ããã®ãããªæãããªçç¥ã«ã¯å°ãããéãã§ãã ãé¡ãããŸã ...
ããã§æŽæ°ã¯ãããŸãã
ããã§ã¯ãè€æ°ã®é«ã¬ãã«ã®ãœãªã¥ãŒã·ã§ã³ãææ¡ãããŠããããã«æãããŸãããããã¯ãã¹ãŠãç§ãã¡ãæ¢ããŠããæ©èœãæäŸããŠãããŸãã
ãŸãããã®æ©èœã欲ããã§ãã
ããŒã¿ã®æ倱ãé²ãå¿ èŠããããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã«å¿ èŠã§ãã ç§ããããå¿ èŠã§ãããã¹ãŠã®åé¿çã¯ããŸãã«ãããã¯ã§ãã
ããããŸãããããŒã ãç§ãã¡ã¯ä»ããã§èª¬æãããŠããæ©èœã«åŸããŠããŸãïŒ https ïŒ
ç°è°ã¯ãããŸããïŒ
@samhoutsãªã³ã¯ãããåé¡ãBackButtonBehavior
ã¯ããŠãŒã¶ãŒãæ»ã£ãŠããã²ãŒãããããšãããšãã«å®è¡ãããã³ãã³ãã®åãªãã©ãããŒïŒããã€ãã®è¿œå æ©èœãå«ãïŒã§ããïŒ
åºæ¬çã«ãããã¯éããã²ãŒã·ã§ã³ãååããããšã§ã¯ãªãããŠãŒã¶ãŒãå©çšå¯èœãªä»»æã®æ¹æ³ïŒã¹ã¯ã€ããããã²ãŒã·ã§ã³ããŒãã¿ã³ãAndroidãã¿ã³ãªã©ïŒãä»ããŠæ»ãããšãè©Šã¿ããšãã«æ£ç¢ºã«äœãèµ·ããããå¶åŸ¡ããããšã§ãã ããã²ãŒããã代ããã«ããŠãŒã¶ãŒãæ°ããããŒãžã«ããã²ãŒãããããšã決å®ã§ããŸãããããã¯æ£ããã§ããïŒ
@samhouts iOSuwpããã³Androidçšã®æ¬çªã¢ããªã§ã€ã³ã¿ãŒã»ãããæ©èœããŠããŸãã ã«ã¹ã¿ã ããŒãžã¬ã³ãã©ãŒã䜿çšããiOSããã³Androidã ãŠãŒã¶ãŒããœãããŠã§ã¢ãŸãã¯ããŒããŠã§ã¢ã®æ»ããã¿ã³ãä»ããŠããã²ãŒããããšããããã¢ãããå€æŽãç Žæ£ããŸããïŒãã衚瀺ã§ããŸãã ãŠãŒã¶ãŒãããã³ããã確èªãããšãæ»ãããã²ãŒã·ã§ã³ãå®è¡ããããããŒãžãããããããotherweiseãŠãŒã¶ãŒã¯çŸåšã®ããŒãžã«çãŸããŸãã ã¹ã¯ã€ãããŠæ»ãããšãã§ããªããšã¯ãŸã èããŠããŸãããå®è£ ã«æ¬ ããŠããŸã
@ samhouts-ææ¡ãã©ã®ããã«æ»ããã¿ã³ã®ã€ã³ã¿ãŒã»ãããèš±å¯ããŠæ¡ä»¶ä»ãã¹ããããè¿œå ãããã¯ç§ã«ã¯ããããŸããã
ææ¡ã¯ãã®ããã«æ©èœããŸããïŒ
c#
async Task MyProcessBackButton(bool usingShell)
{
bool navigateBack = await DisplayAlert("Cancel?", "Undo changes", "Yes", "No");
var mainPage = usingShell ? (Page)Shell.Current : Application.Current.MainPage;
if (mainPage is MasterDetailPage mdPage) mainPage = mdPage.Detail;
if (navigateBack) await mainPage.Navigation.PopAsync();
}
ãã®ãããªãã®ã¯ç§ã«ãšã£ãŠã¯ããŸãããã¯ãã§ãããããã¯é¢åãªããã§ãã ãã¶ãç§ã¯ææ¡ãæ£ããèŠãŠããŸããã äŸã䜿ã£ãŠèª¬æããããŠãŒã¹ã±ãŒã¹ã確èªãããšåœ¹ç«ã¡ãŸãã
PS @nschoenbergãšåæ§ã«ãã¢ããªã®ã«ã¹ã¿ã ã¬ã³ããªã³ã°ãååããŸãïŒNavigationPageã§ãäžèšã®MyProcessBackButtonã¡ãœããã®ãããªããšãè¡ããŸããææ¡ã«Shellãå¿ èŠãªãã®ã¯è¯ãããšã§ããããã«ãããå€ãã¢ããªãç°¡åã«æ¡çšã§ããããã«ãªããŸãïŒã
- {ShellãNaviationPage} .BackButtonCommandãå²ãåœãŠãããŠããªãå Žåãæ»ããã¿ã³ã¯æ£åžžã«åäœããæ»ãããã²ãŒã·ã§ã³ãèªåçã«è¡ãããŸãã
ããã¯ç§ããããæ©èœããããšãæ³åããæ¹æ³ã§ãããã°ãã°ç§ãã¡ã¯ãªãŒããŒã©ã€ããããªããªãããã©ã«ãã®æ©èœã欲ããã§ãã ããã¯ãAndroidã®ããã€ã¹ã®æ»ããã¿ã³ããªãŒããŒã©ã€ãããŠtrueãè¿ãã®ãšåãããã«åäœããŸãã äœããã®æ¹æ³ã§ãã®å®è£ ãè€è£œããããšã¯æå³ããããŸãããïŒ
ããŒãžæ©èœãšããŠããã®ãããªãã®ã¯æå³ããããŸããïŒ ãªããŒã¹ããã²ãŒã·ã§ã³ã芳å¯ããŠãã£ã³ã»ã«ã§ããã°ãéåžžã«åœ¹ç«ã¡ãŸãïŒãããã£ãŠãã¿ã¹ã¯
ïŒã ãŸãããªã¯ãšã¹ããæ»ã£ãŠããåå ãèå¥ã§ãããšäŸ¿å©ãªå ŽåããããŸãã enum ReverseNavigationSourceType { Unspecified, HwButton, Navbar, Gesture } class ReverseNavigationEventArgs { public ReverseNavigationSourceType SourceType { get; } public object Source { get; } } class Page { public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) { return Task.FromResult(true); } }
ç§ãèŠãããšãã§ãã2çªç®ã®å®è¡å¯èœãªãªãã·ã§ã³ã¯ãããã
INavigation
ã€ã³ã¿ãŒãã§ãŒã¹ã®äžéšãšããŠå®è£ ããããšã§ããç·šéïŒ APIããããã«å€æŽããŸãã
åé¡https://github.com/xamarin/Xamarin.Forms/issues/6971#issuecomment-574823028ã§ãBackButtonCommandãå ¬éãããå Žæãæ£ç¢ºã«ããããŸããããNavigationPageã§ã®ã¿æäŸãããŠããŸããïŒ å«ãŸããŠããNavigationPageã«åäžã®å®è£ ãããããã®ããã²ãŒã·ã§ã³ã¹ã¿ãã¯ã«ããã·ã¥ããããã¹ãŠã®ããŒãžãåãåäœã䜿çšããŸããïŒ ïŒãããå žåçãªãŠãŒã¹ã±ãŒã¹ã«ãªããšã¯æããŸããïŒã åã ã®ããŒãžã¯ã©ã®ããã«ç¬èªã®ãªãŒããŒã©ã€ããå®è£ ããã³ãã³ããå©çšããŸããïŒ
äžèšã®ææ¡ã¯ãéçºè ãããŒãžããšã«ãªãŒããŒã©ã€ãããå¿ èŠãããããšãæºãããŠãããšæããŸããããã¯ããã²ãŒã·ã§ã³ã®åŒã³åºãã¯ãéçºè ãããã¯ããã²ãŒã·ã§ã³ã§è¡ãããããšãåçŽã«å¶åŸ¡ããããã€ãŸããéä¿¡ããåã«ãŠãŒã¶ãŒãã€ã¢ãã°ã衚瀺ãããå Žåãå€ãããã§ããå¥ã®ããŒãžã衚瀺ããããåã«ããã©ã«ãã®ãŸãŸã«ããŸãã
ãã¹ãŠã®äººã«è©±ãããšã¯ã§ããŸãããããœãããŠã§ã¢ãã¿ã³ãæŒããšå®è¡ãããé¢æ°ãå®è£
ãããããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ããããåãé¢æ°ãåŒã³åºãOnBackButtonPressed
ããªãŒããŒã©ã€ãããŸãã åãã³ãŒããå®è¡ãã2ã€ã®åœ¢åŒã®ããã¯ããã²ãŒã·ã§ã³ã
ãããã®ããããã£ã¯ãã¹ãŠãNavigationPageã«æ·»ä»ãããŠããããããã£ãšåãããã«æ©èœããŸã
https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/NavigationPage.cs#L19
ããããã¢ã¯ãã£ããªããŒãžã«é©çšããã ãã§ãNavigationPageãåå¿ããŸãã æ·»ä»ãããããããã£ã¯ãã€ã³ãå¯èœã§ãããããããŒãžã«èšå®ããŠVMã«ãã€ã³ãããã ãã§äŸ¿å©ã§ãã
<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}
ã³ãã³ããããã©ã«ãã®åäœã§ãç¡å¹ãã«ããããšã®å©ç¹ã®1ã€ã¯ãéåæããã²ãŒããæå¹ã«ããããšã§ãã ããã§ããã¿ã³ã¯ã³ãã³ãã«ã«ãŒãã£ã³ã°ãããã ãã§ãã³ãã³ãã¯å¿ èŠãªã ãäœã§ãå®è¡ã§ããå¿ èŠã«å¿ããŠããã²ãŒã·ã§ã³APIã䜿çšããŠããã²ãŒã·ã§ã³ãå®äºããããšãã§ããŸãã
ãã¹ãŠãéåæã«ããããšã¯ãäž»ã«ã¹ã¯ã€ãããã¯ãã¹ã¯ã€ãããŠã¢ãŒãã«ãéãããªã©ã®ã·ããªãªã§èå³æ·±ããã®ã§ãããããã¯ãã€ãã£ãã«ãéåæãã§ã¯ãªããããããã§å®è¡ã§ããã®ã¯ããããã®ãžã§ã¹ãã£ãã¿ããããŠã³ãã³ãã«ã«ãŒãã£ã³ã°ãããã£ã³ã»ã«ããããšã§ãããžã§ã¹ãã£ãŒã
ãŸããNavigationã¯ã©ã¹ã®ã€ãã³ãã«ããŠãéå±€ãããã·ãå®å šã«èµ·åããã€ãã³ãã§EventToCommandããã€ãã¢ãŒã䜿çšããããšãã§ããŸãã
ãŸããNavigatingBackãçã«ããªã£ãŠããã®ã ããããšæããŸãã ãã®ãããªãã®ãããå Žåã¯ãã·ã§ã«ã«äŒŒãããã²ãŒã·ã§ã³ã€ãã³ããäœæããã ãã§ãããŸããŸããã
ç§ã¯ãããå°ããšããšãã®ãªãããšã ãšæããŸã:-)ããããããã€ãã®è³ªåã«çããŠãè°è«ã®ããã«ããã€ãã®ã¢ã€ãã¢ãäžã«çœ®ãããã£ãã ãã§ã
ããããã¢ã¯ãã£ããªããŒãžã«é©çšããã ãã§ãNavigationPageãåå¿ããŸãã æ·»ä»ãããããããã£ã¯ãã€ã³ãå¯èœã§ãããããããŒãžã«èšå®ããŠVMã«ãã€ã³ãããã ãã§äŸ¿å©ã§ãã
<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}
@PureWeenç³ãèš³ãããŸããããããããã£ãžã®ã¢ã¯ã»ã¹ããã®æ¹æ³ã§ããŒãžã§å¯èœã§ãã£ãããšãå¿ããŠããŸããŸããããšã«ãããã®æ¹æ³ã§ãããè¡ãã®ã¯çã«ããªã£ãŠããŸãã
NavigationPage.BackButtonCommandã¯ãããã€ã¹ã®æ»ããã¿ã³ã䜿çšããŸããããããšããœãããŠã§ã¢ã®æ»ããã¿ã³ã ãã䜿çšããŸããïŒ ããã¯ããã²ãŒã·ã§ã³ãåŒã³åºãæ¹æ³ã¯ä»ã«ãããã®ã§ã
çŸåšã NavigationPage.BackButtonCommandããªããªããããäžè¬åããããã®ããããšèããŠããŸãã ããå°ãèããŠã¿ãå¿ èŠããããŸãã
ããã/ããã·ã¥ã«é¢é£ä»ããããŠãããã®ã¯æå³ããããæ¢åã®APIãšäžèŽããå¯èœæ§ããããŸã
ãããã¯æ£ç¢ºã§ã¯ãããŸãããããããã®ç·ã«æ²¿ã£ãäœã
UserRequestedPoppingCommand
UserRequestedPushingCommand
ãŸãã¯ãPoppingCommandãšPushingCommandã䜿çšãããšãã³ã³ããã¹ããäžããåŒæ°ã«äŒŒããã®ã䜿çšã§ããŸãã
C#
enum NavigationSourceType {
Unspecified,
HwButton,
Navbar,
Gesture,
FromCode
}
ç§ãããããã¹ãŠãã€ã³ãå¯èœã«ãããã®ã§ãããç§ã¯ãŸã ç§ããšãŠã奜ããªã¢ã€ãã¢ã«å®å šã«ã¯ãªãã¯ããŠããŸããã
ãããããããã²ãŒã·ã§ã³ã®çŸåšã®ç¶æ
ã瀺ãããã²ãŒã·ã§ã³äžã®äœãïŒ
ãããã£ãŠãã³ãã³ãã䜿çšããŠå®è¡ããå Žåã¯ãé²è¡äžã®ãžã§ã¹ãã£ãŒããã®ä»ã®ãžã§ã¹ãã£ãŒããããã²ãŒã·ã§ã³ã«å°ããããšãã§ããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ãã¡ã¯ããã1幎以äžåŸ ã£ãŠããŸããã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ãã¡ã¯ããã1幎以äžåŸ ã£ãŠããŸããã
ãªã©ãã¯ã¹ã 1幎ã¯äœããããŸããã iPadã§MasterDetailã䜿çšããSplitViewã¯ã4幎以äžåã«æ©èœããããã°ããããšå ±åãããŸããã ãã®ãšããXamarin.Formsã¯ãŸã Bugzillaã䜿çšããŠããŸããã
@SebastianKruseWagoããã¯ãå¥ã®é åã«ãã§ã«ååšããäºæ³ãããæ©èœãšã¯ãŸã£ããç°ãªãã·ããªãªã§ãã ãŸããåé¿çãå¯èœã«ããããã°ããä¿®æ£ããŸããã ã§ããããåæ¥ããå«ããã¹ããã®ã«ãšã£ãŠã1幎ã¯ãããããããŸãã
@ akemper1SplitViewãåæ¥ããæ©èœããã¯ãã§ãã ããã¯iPadMasterDetailRendererã®åé¡ã«ãããªãããããã°ã§ããããŸãã ããã¯2.4ãããã以åã«éãåé¿çã§åããŠããŸããã ã§ããããéãã¯ãªããšæããŸãã
ããã«ã¡ã¯ããã¥ãŒã¹ã¯ãããŸããïŒ
@scriptBorisèããããåé¿çã¯ããããã®ãªã³ã¯ã«ãããšããã§ãããããžã§ã¯ãã®æ§é ã«ãã£ãŠã¯ãäžæ¹ã®ãœãªã¥ãŒã·ã§ã³ãããäžæ¹ã®ãœãªã¥ãŒã·ã§ã³ãããé©ããŠããå ŽåããããŸãã
https://forums.xamarin.com/discussion/67854/android-menu-and-back-button-not-working
ç§ã¯å¥ã ã®ãããžã§ã¯ãã®ãªã³ã¯ããäž¡æ¹ã®è§£æ±ºçãåŸãŸããã
ããã«ã¡ã¯ããè¿·æããããããŸããããšããè©«ã³ç³ãäžããŸããããã®åé¡ã解決ããããã®ãã¥ãŒã¹ã¯ãããŸããïŒ Ð.Ð
ç§ã¯è³ªåãæŽæ°ããŠããŸã:)
<ContentPage NavigationPage.HasBackButton="False">
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ãã®ã¹ã¬ããã§æ瀺ããã解決çã¯åãå ¥ãããã以äžã®ãã®ã§ãããäœå¹Žãã®éã人ã ã¯ãããåŸ ã£ãŠããŸãã
XamarinããŒã ã®èª°ããããã®ã¹ããŒã¿ã¹ã«ã€ããŠã³ã¡ã³ãã§ããŸããïŒ ããã¯æ¬åœã«å€ãã®äººã«ãšã£ãŠå€§ããªåé¡ã§ãã
ã·ã§ã«ã§ãããå®è¡ã§ããããšã¯ç¥ã£ãŠããŸãããPrismãŸãã¯MVVMCrossã·ã§ã«ãå©çšããå€ãã®å€§èŠæš¡ãªã¢ããªã§ã¯å®å šã«ãµããŒããããŠããªããããããã¯æ¬åœã«å¿ èŠãªãã®ã§ãã
ããããšã
ç³ãèš³ãããŸããã
ããã«ã€ããŠã¯å¿ããŠããŸããããå ¬åŒAPIã®æ±ºå®ãå°ãé ããŠããŸãã ããã§äœ¿çšãããAPIã«äŒæããæ»ããã¿ã³ã«åœ±é¿ãäžããä¿çäžã®ã·ã§ã«PRãããã€ããããŸã
ããã¯åœŒãã«ãšã£ãŠå€§ããªåé¡ã§ãããšèšã£ãŠããå€ãã®äººã«åæããŸãã
ãã ããããã€ãã®åé¿çãè©ŠããŠã¿ãŸãã ãŠãŒã¶ãŒãçŸåšã®ããŒãžã®å€æŽã倱ãããšãã確èªããããŸã§ããŠãŒã¶ãŒãæ»ã£ãŠããªãããã«ãããã ãã§ãã
ããã«ã€ããŠäœããã¥ãŒã¹ã¯ãããŸããïŒ æ¬åœã«ä¹ ãã¶ãã§ã:(
æãåèã«ãªãã³ã¡ã³ã
åªå 床ãäžããæ¹æ³ã¯ãããŸããïŒ
ç§ã¯äœå¹Žãã®éåé¿çãæã£ãŠããŸããããããã¯æã ããããŸããããªãããšããããŸãã...
ç§ã®çŸåšã®åé¿çããäžå©ãªç¹ãããéåžžã«æªãããã¯ã§ããã«ã¹ã¿ã ããã²ãŒã·ã§ã³ããŒãžã¬ã³ãã©ãŒãå®å šã«åé€ããããã»ã¹ã®ããã€ãã®åé¡ãä¿®æ£ããããšèããŠããŸãã