我在 xamarin 中构建OnClick
事件时遇到问题。当我从Mainactivity
切换到我的loginActivity
时,它会说
“未处理的异常:对象引用未设置为对象的实例。”
我该如何解决?我测试了很多“解决方案”,但没有人为我工作过。
[Activity(Label = "Anmelden")]
public class Login : AppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.login);
drawer();
Button btnlogin = FindViewById<Button>(Resource.Id.login);
btnlogin.Click += (object sender, EventArgs e) =>
{
btnlogin.Text = "Hello World!";
};
}
void drawer()
{
DrawerLayout drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
// Init toolbar
var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
// Attach item selected handler to navigation view
var navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
navigationView.NavigationItemSelected += NavigationView_NavigationItemSelected;
navigationView.SetCheckedItem(Resource.Id.login);
// Create ActionBarDrawerToggle button and add it to the toolbar
var drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.open_drawer, Resource.String.close_drawer);
drawerLayout.SetDrawerListener(drawerToggle);
drawerToggle.SyncState();
// Create your application here
void NavigationView_NavigationItemSelected(object sender, NavigationView.NavigationItemSelectedEventArgs e)
{
switch (e.MenuItem.ItemId)
{
case (Resource.Id.nav_home):
StartActivity(typeof(MainActivity));
break;
case (Resource.Id.login):
//StartActivity(typeof(Login));
break;
case (Resource.Id.nav_friends):
break;
case (Resource.Id.nav_discussion):
break;
}
// Close drawer
drawerLayout.CloseDrawers();
}
}
}}
对不起我来自德国的英语不好。
答案 0 :(得分:0)
你能确认哪一行触发了NRE吗?因为NRE会因为几个原因而发生活动变化,所以我很难帮助你。
一些让我烦恼的事情:
您不能在OnCreate(及其中的任何方法)中使用FindViewById,因为尚未创建MainActivity视图。您需要在OnCreateView中处理UI链接,如下所述: NRE exception FindViewById - StackOverflow。我确信这是你的NRE。
当您使用多个活动时,我建议您在离开活动之前取消订阅任何活动(包括OnClick)。我不知道这是不错的做法,但我总是订阅OnResume中的事件(包括活动和片段),并且总是在OnPause中取消订阅,除非我在单声道活动,锁定旋转屏幕应用程序。
< / LI>