我是xamarin android的新手,我放弃了表格,我想改变布局onnavigationselecteditem
,并想知道是否有人可以指出我正确的方向我尝试使用setContentView
但是没有完全改变观点。
已经创建了一个使用作业名称的布局,所以我没有它不为null我希望人们停止使用一般的空状态标记问题,而不是这里的情况。
public bool OnNavigationItemSelected(IMenuItem item)
{
int id = item.ItemId;
if (id == Resource.Id.nav_camera)
{
// Handle the camera action
}
else if (id == Resource.Id.jobs)
{
SetContentView(Resource.Layout.jobs);
}
else if (id == Resource.Id.nav_assignjob)
{
}
else if (id == Resource.Id.nav_manage)
{
}
else if (id == Resource.Id.nav_share)
{
}
else if (id == Resource.Id.nav_send)
{
}
DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
drawer.CloseDrawer(GravityCompat.Start);
return true;
}
它超时了以下
未处理的例外:
System.NullReferenceException:
我认为drawer.CloseDrawer(GravityCompat.Start);
行是因为
SetContview
留下了一些东西,但没有显示出来。
答案 0 :(得分:1)
如果要替换特定布局,则应使用Fragment
:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content_frame">
<LinearLayout
android:id="@+id/change_that"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</FrameLayout>
使用Replace
的{{1}}功能:
FragmentTransition
然后,您可以触发事件来更改布局,无论您在public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = inflater.Inflate(Resource.Layout.yourLayout, container, false);
var baseLayout = view.FindViewById<LinearLayout>(Resource.Id.change_that);
this.ChangeLayout += (object sender, EventArgs e) =>
{
YourFragment newLayout = new YourFragment();
FragmentTransaction ft = FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.content_frame, newLayout);
ft.Commit();
baseLayout.Visibility = ViewStates.Gone;
};
return view;
}
上的逻辑是什么。