我最近开始研究一个已建立结构的Xamarin android项目(换句话说,有人启动它),我遇到硬件后退按钮问题。在特定页面中,它不起作用。就像,完全一样。甚至断点都不会触及OnBackButtonPressed
覆盖。这是观点:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MessagesView : ContentPage
{
public ListView ListView { get { return listView; } }
private bool IsChatEmpty { get { return listView.ItemsSource.Cast<Message>().Count() == 0; } }
public MessagesView(MessageRoom messageRoom)
{
InitializeComponent();
NavigationPage.SetHasBackButton(this, true); // I added this line in the hopes it would fix the problem, but it does nothing in my case
BindingContext = new MessagesViewModel(messageRoom);
ScrollToEnd(false);
}
private void btnSend_Clicked(object sender, EventArgs e)
{
var viewModel = (MessagesViewModel)BindingContext;
if (viewModel.LastMessage == string.Empty)
return;
viewModel.SendMessage();
RefreshMessageList();
}
public void ScrollToEnd(bool animated)
{
if (listView.ItemsSource == null || IsChatEmpty)
return;
var target = listView.ItemsSource.Cast<Message>().Last();
listView.ScrollTo(target, ScrollToPosition.End, animated);
}
public void RefreshMessageList()
{
Device.BeginInvokeOnMainThread(() =>
{
listView.ItemsSource = null;
listView.ItemsSource = ((MessagesViewModel)BindingContext).MessageRoom.Messages;
ScrollToEnd(true);
});
}
protected override bool OnBackButtonPressed()
{
return base.OnBackButtonPressed();
}
这些代码的大部分内容对于相关问题都没有用,但我继续发布所有内容以防万一。关于代码如何连接,还有其他一些我想添加的东西:这个页面现在是一个导航页面,但它以一个模态开始,并且它曾经工作正常。我只有一个月进入Xamarin,所以我不知道它的每一个角落,但是这个项目的人只使用了模态,这是整个事情中的第一个导航。当我尝试使用await App.Current.MainPage.Navigation.PushAsync(page)
打开导航页时,它就行不通。然后我发现了MasterDetailPage
,这就是他用过的东西。此方法用于打开应用程序中的每个页面:
public void SetDetailMasterPage(Type poType, params object[] poArgs)
{
MasterDetailPage oPage = (MasterDetailPage)App.Current.MainPage;
oPage.IsPresented = false;
if (poArgs.Length > 0)
oPage.Detail = new NavigationPage((Page)Activator.CreateInstance(poType, poArgs));
else
oPage.Detail = new NavigationPage((Page)Activator.CreateInstance(poType));
}
所以我终于来了,改变了我的PushAsync方式:
public async Task OpenPage(Page page)
{
await ((MasterDetailPage)App.Current.MainPage).Detail.Navigation.PushAsync(page);
}
这很有效。底线,当从主详细信息页面中的模态调用此类页面时,导航页面中的后退按钮不起作用。或者至少,这就是我从这一切中收集的内容。
我不希望这个特定导航页面中有一个菜单,它只是一个导航页面,因为他们想在导航栏中显示一个frikkin'后退按钮,但就目前而言,硬件后退按钮是陷入这个页面。
欢迎任何想法。
答案 0 :(得分:0)
检查你的android项目main activity.cs。我也遇到了这个问题,因为我在主要活动中放了空按钮点击事件。从我的代码后退后按钮事件工作正常