使用xamarin android

时间:2018-06-09 18:37:28

标签: c# xamarin xamarin.android

我是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留下了一些东西,但没有显示出来。

1 个答案:

答案 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; } 上的逻辑是什么。