代码之家  ›  专栏  ›  技术社区  ›  David B

使用xamarin android在布局之间切换

  •  1
  • David B  · 技术社区  · 6 年前

    我是新的Xamarin Android,我已经放弃了表单,我想改变布局。 onnavigationselecteditem 想知道是否有人能给我指明正确的方向 setContentView 但这并没有改变观点。

    有一个以jobs的名字创建的布局,所以我没有它不是空的。我希望人们不要用一个普通的空标记来标记问题。这里不是这样。

     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 回复  |  直到 6 年前
        1
  •  1
  •   Hichame Yessou Xeoncross    6 年前

    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 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;
    }
    

    OnNavigationItemSelected