2

我是 xamarin android 的新手,我已经放弃了表单,我想更改布局onnavigationselecteditem,想知道是否有人可以指出我尝试使用的正确方向,setContentView但这根本没有改变视图。

已经创建了一个以工作名称命名的布局,所以我不希望它不为空我希望人们停止用一般的空语句标记问题,但这里不是这种情况。

 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打开了一些东西但没有显示它。

4

1 回答 1

1

Fragment如果要替换特定布局,则应使用 a :

<?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.

于 2018-06-09T22:22:03.283 回答